Я думал, что Im достаточно силен, чтобы играл с Gson, но я нашел некоторую проблему.Gson не может преобразовать значение String в List, Java
У меня есть строка, которую мне нужно преобразовать в объект. Строка создается из некоторого xml.
Вот пример первого одного:
{
"ClientData": {
"pixelList": {
"pixel": [{
"b": 22,
"a": 1234
},
{
"b": 33,
"a": 34344
}]
}
}
}
Кажется просто, правда?
Итак, я создал следующие классы и смог конвертировать вышеупомянутый объект String в 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 = "";
}
С 1 Например, вы можете увидеть, что pixelList
имеет 2 объекта: pixel
.
Но что произойдет, если вы получаете pixelList
с одним pixel
:
2 один:
{
"ClientData": {
"pixelList": {
"pixel": {
"b": 22,
"a": 1234
}
}
}
}
Здесь я получаю ошибку:
com.google.gson.JsonParseException: The JsonDeserializer
[email protected] 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
BTW, если я сменю класс 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 и R.J
Спасибо, я нашел решение (не упоминал в моем вопросе, размещенном в нижней части вопроса) –