简体   繁体   English

json 使用 Object 或两个 Object 解析到 pojo 变量

[英]json parsing to pojo for a variable which is an Object or two Object using jackson

How to parse json to pojo for a dynamic property variable in java.如何将 json 解析为 pojo 以获取 java 中的动态属性变量。

Rest api returns data: Rest api 返回数据:

   "db": {
      "queryA": {

           "name": "A",
           "age": "12",
           "startDT": "202102030800"

            }
         } 

OR sometimes或者有时

 "db":{
    "queryA": 
            {

            "name": "A",
            "age": "12",
            "startDT": "202102030800"
            },
    "queryB":
            {
            "name": "B",
            "age": "20",
            "startDT": "202102030800"
            }
     }

Sometimes query is an Object and sometime it is two Object.有时查询是 Object,有时是两个 Object。

How to map this dynamic query into java Pojo class.如何将 map 这个动态查询变成 java Pojo class。

       class Student{

           private Query query;
        }

You need to consider the 'db' attribute as a Map.您需要将“db”属性视为 Map。 The queries, eg 'queryA', 'queryB', ... etc. would be keys and their corresponding objects their values.查询,例如'queryA'、'queryB'、...等将是键,它们对应的对象是它们的值。 Refer the below example:请参考以下示例:

The fileA JSON (the 1st example JSON as provided):文件 A JSON(第一个示例 JSON 提供):

{

      "db": {
      "queryA": {

           "name": "A",
           "age": "12",
           "startDT": "202102030800"

            }
         } 

}

The fileB JSON (the 2nd example JSON as provided)文件B JSON(提供的第二个示例 JSON)

{

 "db":{
 
    "queryA": 
            {

            "name": "A",
            "age": "12",
            "startDT": "202102030800"
            },
    "queryB":
            {
            "name": "B",
            "age": "20",
            "startDT": "202102030800"
            }
     }

}

The data (deserialized) class"数据(反序列化)类"

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

The Jackson deserialization code: 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

The result for fileA as input is fileA 作为输入的结果是

{queryA={name=A, age=12, startDT=202102030800}}

The result for fileB as input is fileB 作为输入的结果是

{queryA={name=A, age=12, startDT=202102030800}, queryB={name=B, age=20, startDT=202102030800}}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM