我以为我足够强大,可以和 Gson一起玩,但我发现了一些问题。
我有我需要转换为对象的字符串。字符串是从一些 xml 生成的。
这是第一个示例:
{
"ClientData": {
"pixelList": {
"pixel": [{
"b": 22,
"a": 1234
},
{
"b": 33,
"a": 34344
}]
}
}
}
看起来很简单,对吧?
所以我创建了后续类并成功地将上面提到的字符串转换为 Java 对象。
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
一个会发生什么pixel
:
第二个:
{
"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