1

我以为我足够强大,可以和 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为.JSONObjextJSONArray

这是我解决问题的代码:

  // 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 需要更正,要么你可以做这样的事情。有 2 个对象,其中 1 个type1(一个解析列表)和另一个type2(解析单个元素 json)。

现在用 class 解析 jsontype1并将其保存在try-catch. 如果你得到这个Exceptioncatch它和type2类解析它。如果您无法JSON修复响应,这似乎是唯一的解决方法。

于 2013-04-03T10:30:17.270 回答