簡體   English   中英

json 使用 Object 或兩個 Object 解析到 pojo 變量

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

如何將 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"
            }
     }

有時查詢是 Object,有時是兩個 Object。

如何將 map 這個動態查詢變成 java Pojo class。

       class Student{

           private Query query;
        }

您需要將“db”屬性視為 Map。 查詢,例如'queryA'、'queryB'、...等將是鍵,它們對應的對象是它們的值。 請參考以下示例:

文件 A JSON(第一個示例 JSON 提供):

{

      "db": {
      "queryA": {

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

            }
         } 

}

文件B 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}}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM