反序列化多级JSON

时间:2013-12-30 01:58:07

标签: android json gson

我对JSON的概念完全不熟悉,并且无法弄清楚如何使用Gson反序列化多级JSON语句。

这就是我要反序列化的内容:{"stat":"ok","pkey":{"id":"1234567890"}}

首先我尝试使用hashmap:

HashMap<String, Object> results = gson.fromJson(response, HashMap.class);

结果看起来足够合理,但是hashmap中的第二个条目(包含实际id号的那个)是gson.internal.LinkedTreeMap,我无法访问。

接下来我尝试创建一个自定义类来反序列化它,但我似乎无法让它正常工作......

这些都没有奏效:

 class Results
{
    String stat;
    String[][] pkey;
}

 class Results
{
    String stat;
    String[] pkey;
}

我在网上找到的唯一例子就是反序列化简单的单级JSON,看起来很简单。我似乎无法弄清楚这一点。

1 个答案:

答案 0 :(得分:0)

使用JSONObject可以轻松反序列化多级JSON 这是您的示例

中的Log“ok”和“1234567890”
String json = "{\"stat\":\"ok\",\"pkey\":{\"id\":\"1234567890\"}}";
try {
    JSONObject jsonObj = new JSONObject(json);
    Log.i("chauster", jsonObj.getString("stat"));
    Log.i("chauster", jsonObj.getJSONObject("pkey").getString("id"));
} catch (JSONException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}

这是gson的代码,你需要自定义你的类

public class Custom {

    private String stat;
    private IdClass pkey;

    public String getStat() {
             return stat;
    }
    public IdClass getPkey() {
             return pkey;
    }
    public Custom(String _stat, IdClass _pkey) {
        stat = _stat;
        pkey = _pkey;
    }

    public class IdClass {
        private String id;
        public String getId() {
            return id;
        } 

        public IdClass(String _id){
            id = _id;
        }
    }
}

String json = "{\"stat\":\"ok\",\"pkey\":{\"id\":\"1234567890\"}}";
Gson gson = new Gson();
Custom custom = gson.fromJson(json, Custom.class);
System.out.println(custom.getStat());
System.out.println(custom.getPkey().getId());