Gson单键值

时间:2014-04-20 09:03:42

标签: java android json gson json-deserialization

在Android上使用Gson库反序列化单个键值元素的最简单/最快的方法是什么?服务器发送类似:

{
    "data": [
        {
            "Field1": "Value1",
            "Field2": "Value2",
            "Field3": "Value3"
        },
        {
            "Field1": "Value1",
            "Field2": "Value2",
            "Field3": "Value3"
        }
    ]
}

所以我需要"输入"数据值(数组)然后将值绑定到模型。好的第二部分,但我错过了第一部分。我应该使用HashMap,JsonParser还是什么?

JsonElement dataElem = new JsonParser().parse(response);

String data = dataElem.getAsJsonObject().get("data").getAsString();

bundle.putParcelableArray("models", gson.fromJson(data, Model[].class));

我接近正确的解决方案吗?非常感谢。

2 个答案:

答案 0 :(得分:0)

以简单的方式,您可以将其解析为

<强> 1。没有Model类

JsonParser jsonParser = new JsonParser();
JsonElement element = jsonParser.parse(Your_JSON_String).getAsJsonObject().get("data");
Type typeOfCollection = new TypeToken<List<Map<String, String>>>(){}.getType();
List<Map<String, String>> dataList = gson.fromJson(element, typeOfCollection);

<强> 2。使用Model类。

public class Model {
    private List<Map<String,String>> data;
}

 Model model= gson.fromJson(Your_JSON_String, Model.class)

答案 1 :(得分:0)

你的问题在这里:

String data = dataElem.getAsJsonObject().get("data").getAsString();

您不想要String,您想要解析树中的实际JsonElement

JsonElement je = dataElem.getAsJsonObject().get("data");

然后,您对Model数组的反序列化将起作用:

bundle.putParcelableArray("models", gson.fromJson(je, Model[].class));