javagson-Json部分解析

javagson-Json部分解析,java,json,gson,Java,Json,Gson,假设我有一个JSON对象,表示一个实体(可以是任何实体),如下所示: 请注意,entity_json可以表示具有不同结构的不同实体,只要它是有效的json。例如,以下是另一个实体的表示: { "entity_id": "1", "entity_name": "invoice", "entity_json": { "invoice_id": "1011", "items": { "item_id": "1",

假设我有一个JSON对象,表示一个实体(可以是任何实体),如下所示:

请注意,
entity_json
可以表示具有不同结构的不同实体,只要它是有效的json。例如,以下是另一个实体的表示:

{
    "entity_id": "1",
    "entity_name": "invoice",
    "entity_json": {
        "invoice_id": "1011",
        "items": {
            "item_id": "1",
            "quantity": "3",
            "price": "$100"
        },
        "date": "01-01-2020",
        "customer": {
            "id": "3",
            "address": {
                "street": "some_street",
                "country": "CZ",
                ...
            }
        }
    }
}
我希望能够在Java中使用Gson将此JSON部分解析为实体POJO。也就是说,我将有一个实体POJO,如下所示:

public class Entity {
    private String entity_id;
    private String entity_name;
    private String entity_json;  // <-- entity_json is a String

    // getters and setters
}


/*
 * entity_json (for employee) = "{ \"employee_id\": \"1\", \"employee... }"
 * entity_json (for invoice) = "{ \"invoice_id\": \"1011\", \"items... }"
 */
公共类实体{
私有字符串实体_id;
私有字符串实体名称;

私有字符串entity_json;//您可以通过使用Gson的
JsonObject
来避免对
entity_json
使用
字符串

这是我修订的
实体
类:

import com.google.gson.JsonObject;

public class MyEntity {

    private String entity_id;
    private String entity_name;
    private JsonObject entity_json;

    // getters and setters not shown

}
然后,您可以按如下方式填充实例:

MyEntity myEntityOne = new Gson().fromJson(JSON_ONE, MyEntity.class);
MyEntity myEntityTwo = new Gson().fromJson(JSON_TWO, MyEntity.class);

System.out.println(myEntityOne.getEntity_json());
System.out.println(myEntityTwo.getEntity_json());
在上面的代码中,
JSON_ONE
JSON_TWO
只是包含问题中两个示例JSON的字符串

控制台打印出以下内容(为简洁起见剪掉):


当然,您现在可以根据需要使用Gson来进一步操作每个
实体\u json
字段,因为每个字段本身都是一个有效的json对象。

您可以通过使用Gson的
JsonObject
来避免对
实体\u json
使用
字符串

这是我修订的
实体
类:

import com.google.gson.JsonObject;

public class MyEntity {

    private String entity_id;
    private String entity_name;
    private JsonObject entity_json;

    // getters and setters not shown

}
然后,您可以按如下方式填充实例:

MyEntity myEntityOne = new Gson().fromJson(JSON_ONE, MyEntity.class);
MyEntity myEntityTwo = new Gson().fromJson(JSON_TWO, MyEntity.class);

System.out.println(myEntityOne.getEntity_json());
System.out.println(myEntityTwo.getEntity_json());
在上面的代码中,
JSON_ONE
JSON_TWO
只是包含问题中两个示例JSON的字符串

控制台打印出以下内容(为简洁起见剪掉):


当然,您现在可以根据需要使用Gson来进一步操作每个
实体\u json
字段,因为每个字段本身都是一个有效的json对象。

使用
JsonObject
确实是一种更好的处理方法——感谢@andrewjames!使用
JsonObject
确实是一种更好的处理方法这个——谢谢@andrewjames!