javagson-Json部分解析
假设我有一个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",
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!