0

使用 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。

4

1 回答 1

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);

也就是说,这是否会为您节省任何实时时间还有待商榷:

(根据以下评论编辑):

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;
}
于 2013-05-20T19:41:20.290 回答