使用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。
答案 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;
}