有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

使用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_令牌返回null


共 (1) 个答案

  1. # 1 楼答案

    您需要直接使用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;
    }