私は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 に変換しようとすると、プラグインpixel
はJSONObjext
代わりに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 に感謝