java - json 解析到 pojo 的变量是一个对象或两个对象使用杰克逊
问题描述
如何将 json 解析为 pojo 以获取 java 中的动态属性变量。
Rest api 返回数据:
"db": {
"queryA": {
"name": "A",
"age": "12",
"startDT": "202102030800"
}
}
或者有时
"db":{
"queryA":
{
"name": "A",
"age": "12",
"startDT": "202102030800"
},
"queryB":
{
"name": "B",
"age": "20",
"startDT": "202102030800"
}
}
有时查询是一个对象,有时是两个对象。
如何将此动态查询映射到 java Pojo 类。
class Student{
private Query query;
}
解决方案
您需要将“db”属性视为地图。查询,例如'queryA'、'queryB'、...等将是键,它们对应的对象是它们的值。请参考以下示例:
fileA JSON(提供的第一个示例 JSON):
{
"db": {
"queryA": {
"name": "A",
"age": "12",
"startDT": "202102030800"
}
}
}
fileB JSON(提供的第二个示例 JSON)
{
"db":{
"queryA":
{
"name": "A",
"age": "12",
"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, age=12, startDT=202102030800}, queryB={name=B, age=20, startDT=202102030800}}
推荐阅读
- javascript - 如何在另一个文本区域中显示文本区域和可编辑 div 中突出显示的文本的位置?
- cakephp - CakePHP 1.3 迁移到 4.x
- flutter - 使用 3D 安全/sca(卡身份验证)在服务器上完成 Stripe 支付
- swift - Swift:从完成处理程序中获取价值
- r - 根据一列用 CI 画三条线
- python - python:等到一个函数完成
- python - 在列名中搜索字符串并返回整个列
- spring - Kubernetes/Spring Boot 中的服务发现
- javascript - 如何使用三元运算符根据使用javascript的值将变量设置为true或false?
- c++ - 使用 WinForms 在 C++ 中的 VLC 插件中的有效 MRL 地址?