1

私はGsonと遊ぶのに十分強いと思っていましたが、いくつかの問題が見つかりました.

オブジェクトに変換する必要がある文字列があります。文字列はいくつかの xml から生成されます。

これが最初の例です:

{
"ClientData": {
    "pixelList": {
        "pixel": [{
            "b": 22,
            "a": 1234
        },
        {
            "b": 33,
            "a": 34344
        }]
    }
}
}

シンプルですね。

そこで、以下のクラスを作成し、上記の String を Java Object に変換することに成功しました。

public class ClientDataRoot {
   @SerializedName("ClientData") ClientData clientData = null;  
}

public class ClientData {   
   PixelList pixelList = null;      
}

public class PixelList {
   List<Pixel> pixel = null;
}

public class Pixel {    
   private String a = "";
   private String b = "";   

}

pixelList最初の例から、には 2 つのオブジェクトがあることがわかりますpixel

pixelListしかし、1 つ取得するとどうなりますかpixel:

2つ目

{
"ClientData": {
    "pixelList": {
        "pixel": {
            "b": 22,
            "a": 1234
        }
    }
}
}

ここでエラーが発生します:

com.google.gson.JsonParseException: The JsonDeserializer
com.google.gson.DefaultTypeAdapters$CollectionTypeAdapter@d1918a failed to deserialize
json object {"b":22,"a":1234} given the type java.util.List<com.wefi.uxt.Pixel>

私のコードは簡単です:

import com.google.gson.Gson;
....
Gson gson = new Gson();
ClientDataRoot clientDataRoot1 = 
gson.fromJson(xmlJSONObj.toString(), ClientDataRoot.class);

私が使うgson-1.7.1.jar

ところで、クラスを変更PixelListした場合

 public class PixelList {
   List<Pixel> pixel = null;
 }

に:

 public class PixelList {
    Pixel  pixel = null;
 }

動作しますが、リストとして必要です

ありがとうございました、

修正方法:

みんなが言うように、XML を JSON に変換しようとすると、プラグインpixelJSONObjext代わりにJSONArray.

これが私の問題を修正したコードです:

  // responseBody is XML String
  JSONObject xmlJSONObj = XML.toJSONObject(responseBody);

            JSONObject cd = (JSONObject) xmlJSONObj.get("ClientData");
            JSONObject pl = (JSONObject) cd.get("pixelList");
            Object p = pl.get("pixel");

            if (p instanceof JSONObject) {
                JSONArray arr = new JSONArray();
                arr.put(p);

                pl.remove("pixel");
                pl.put("pixel", arr);
            }

PeterMmm と RJ に感謝

4

2 に答える 2

2

この形でいいんじゃない?要素が 1 つのピクセル:

{
"ClientData": {
    "pixelList":{
        "pixel": [{
            "b": 22,
            "a": 1234
        }]
    }
}
}
于 2013-04-03T10:29:47.140 に答える
1

これは、返されJSONたサードパーティが間違った を返しているか、自分でJSON生成している場合は間違っているためです。JSON単一の要素には、次のような がpixelList必要です:-JSON

{
    "clientData": {
        "pixelList": {
            "pixel": [
                {
                    "a": "22",
                    "b": "1234"
                }
            ]
        }
    }
}

JSON を修正する必要があるか、そうでなければ、次のようなことができます。type1(リストを解析するもの) とtype2(単一の要素 json を解析するもの)の 2 つのオブジェクトがあります。

json をtype1class で解析し、try-catch. this を取得した場合はExceptioncatchそれをtype2クラスで解析します。JSON応答を修正できない場合、これが唯一の回避策のようです。

于 2013-04-03T10:30:17.270 に答える