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

Ale*_*dre -1 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"}}
Run Code Online (Sandbox Code Playgroud)

我想返回"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);
    }
}
Run Code Online (Sandbox Code Playgroud)

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

Bri*_*ach 5

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

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);
Run Code Online (Sandbox Code Playgroud)

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

(根据以下评论编辑):

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);
    }
}
Run Code Online (Sandbox Code Playgroud)

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

由于问题更改而进行修改:

你有一个JSON对象.它包含一个data值为对象的字段.在对象内,您有一个session_token您感兴趣的字段.

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

class Response {
    Data data;
}

class Data {
    String session_token;
}
Run Code Online (Sandbox Code Playgroud)