JSON
サーバーからデータを取得しています。これは、JSONObject
(1つのオブジェクト)またはJSONArray
(複数のオブジェクト)の形式で提供される場合があります。配列なのかオブジェクトなのかを検出する方法は知っていますが、問題は、オブジェクト用と配列用の2つの完全に別個のロジックビットが必要になることです。それは本当に汚れた解決策であり、私が驚いたのは、これ以上頻繁に尋ねられることはないということです。
私がやりたいのJSON
は、がJSONObject
(1つのオブジェクト)の場合、それをJSONArray
(1つのエントリのみで)に変換することです。次に、JSONArray
sを解釈するための通常のロジックに進むことができます。
私JSON
はこのようにやってくるでしょう:
{
"Changes":
{
"Row":
{
"@ChangeId":"17192386","@Type":"U","@TableName":"Change","@PK":"g1fbb6c7-abcf-e741-846c-b499baf5845d","@ColList":"date"
},
"Data":
{
"@date":"22/05/2014 09:03:00"
}
}
}
通常、Row
とData
オブジェクトには複数のレコードがあります。しかし、この場合、私はそれぞれに1つしかありません。私の通常の方法は次のとおりです。
JSONObject jsonObj = new JSONObject(jsonString);
JSONObject changes = jsonObj.getJSONObject("Changes");
JSONArray arrChanges = changes.getJSONArray("Row");
JSONArray arrData = changes.getJSONArray("Data");
// Cycle through arrays here
このコードは.getJSONArray("Row");
回線上でクラッシュします。
これを回避するには、changes
オブジェクトを取得した後、上記のように値が1つしかない場合でもRow
、Data
オブジェクトとオブジェクトを強制的にに入れてJSONArray
、通常のロジックを続行できるようにします。これを行う方法はありますか?
このメソッドを使用して、次のように変換JSONObject
しJSONArray
ます。
JSONObject jsonObj = new JSONObject(jsonString);
JSONObject changes = jsonObj.getJSONObject("Changes");
JSONArray arrChanges = covertJsonObjectToJsonArray(changes.get("Row"));
JSONArray arrData = covertJsonObjectToJsonArray(changes.get("Data"));
public JSONArray covertJsonObjectToJsonArray(Object InsideArray) {
JSONArray jsonArray;
if (InsideArray instanceof JSONArray) {
jsonArray = (JSONArray) InsideArray;
} else {
jsonArray = new JSONArray();
jsonArray.put((JSONObject) InsideArray);
}
return jsonArray;
}
JSONArray
存在する場合はを返しJSONArray
、JSONOject
存在する場合はを返しJSONArray
ます。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加