使用GSON尽可能简单地解析JSON字符串

时间:2013-05-20 19:30:01

标签: java json gson

使用GSON,如何从多维Json字符串返回单个键?

这是多维Json字符串:

{"statusCode":0,"statusDescription":"OK","data":{"user":{"id":xxx,"company_id":xxx,"account_type":"5","enable_locations":true,"intuit_user_id":null,"nick_name":"xxx","is_owner":"1","enabled":"1"},"session_token":"xxx"}}

我想返回“session_token”键值。

我正在尝试这个:

class app {
    static class Response {
        String session_token;
    }
    public void getSessionToken() {

        String x = {"statusCode":0,"statusDescription":"OK","data":{"user":{"id":xxx,"company_id":xxx,"account_type":"5","enable_locations":true,"intuit_user_id":null,"nick_name":"xxx","is_owner":"1","enabled":"1"},"session_token":"xxx"}}
        Response r = new Gson().fromJson(x, Response.class);
        System.out.println(r.session_token);
    }
}

但有了这个,我的 r.session_token 会返回null。

1 个答案:

答案 0 :(得分:5)

您需要直接使用Gson的JsonParser类并从解析树中提取数据:

String myJsonString = "{\"name\":\"john\",\"lastname\":\"smith\"}";
JsonParser parser = new JsonParser();
JsonElement element = parser.parse(myJsonString); 
JsonObject jsonObject = element.getAsJsonObject();
String lastName = jsonObject.get("lastname").getAsString();
System.out.println(lastName);

那就是说,这是否能为您节省任何实时时间是值得商榷的:

(根据以下评论编辑):

class App {

    static class Response {
        String lastname;
    }

    public static void main(String[] args) {
        String myJsonString = "{\"name\":\"john\",\"lastname\":\"smith\"}";
        Response r = new Gson().fromJson(myJsonString, Response.class);
        System.out.println(r.lastname);
    }
}

Gson会默默地忽略这样一个事实:JSON中的数据比你感兴趣的要多,后来你可能对它感兴趣,在这种情况下,向你的字段添加字段是微不足道的。 Response课程。

因问题更改而进行修改:

你有一个JSON对象。它包含一个字段data,其值是一个对象。在那个对象中你有一个你感兴趣的字段session_token

您必须通过解析树导航到该字段,或者您必须创建所有将映射到的Java类。 Java类类似于(至少):

class Response {
    Data data;
}

class Data {
    String session_token;
}