问题描述
java中动态属性变量如何解析json到pojo。
Rest api 返回数据:
"db": {
"queryA": {
"name": "A","age": "12","startDT": "202102030800"
}
}
或有时
"db":{
"queryA":
{
"name": "A","startDT": "202102030800"
},"queryB":
{
"name": "B","age": "20","startDT": "202102030800"
}
}
如何将这个动态查询映射到 java Pojo 类中。
class Student{
private Query query;
}
解决方法
您需要将 'db' 属性视为 Map。查询,例如'queryA','queryB',... 等将是键,它们对应的对象是它们的值。请参考以下示例:
fileA JSON(提供的第一个示例 JSON):
{
"db": {
"queryA": {
"name": "A","age": "12","startDT": "202102030800"
}
}
}
fileB JSON(提供的第二个示例 JSON)
{
"db":{
"queryA":
{
"name": "A","startDT": "202102030800"
},"queryB":
{
"name": "B","age": "20","startDT": "202102030800"
}
}
}
数据(反序列化)类”
package org.test.json;
import java.util.HashMap;
public class DataClass {
protected HashMap<String,Object> db;
public HashMap<String,Object> getDb() {return db;}
public void setDb(HashMap<String,Object> db) {this.db = db;}
}//calss closing
Jackson 反序列化代码:
package org.test.json;
import java.io.FileInputStream;
import com.fasterxml.jackson.databind.ObjectMapper;
public class VariableLengthAttrToMap {
public static void main(String[] args) throws Exception{
String jsonFilePath="D:\\workspaces\\mtplatform\\TechTest\\testfiles\\fileB.json";
FileInputStream fis=new FileInputStream(jsonFilePath);
ObjectMapper mapper=new ObjectMapper();
System.out.println(mapper.readValue(fis,DataClass.class).getDb());
fis.close();
}//main closing
}//class closing
fileA 作为输入的结果是
{queryA={name=A,age=12,startDT=202102030800}}
fileB 作为输入的结果是
{queryA={name=A,startDT=202102030800},queryB={name=B,age=20,startDT=202102030800}}