簡體   English   中英

將 JSON 數組平面化為 JAVA 中的結構化形式

[英]Flat JSON array into structured form in JAVA

我在將 JSON 的平面結構轉換為結構化形式時遇到了一些問題。 我們以這種形式從服務接收數據:

[
 {'key':"Main1.del[1].x", "value": 0 },
 {'key':"Main1.del[1].y", "value": 1 },
 {'key':"Main1.del[2].x", "value": 5 },
 {'key':"Main1.del[2].y", "value": 7 },
 {'key':"Custom.stat[1].rev.max", "value": 45 },
 {'key':"Custom.stat[1].rev.min", "value": -65 }
]

但是我們需要將其轉換為這種形式:

{
 "Main1":{
   "del":[
     {
      "x": 0,
      "y": 1
     },
     {
      "x": 5,
      "y": 7
     }
   ]
 },
 "Custom":{
  "stat":[
   {
    "rev":{
      "max":45,
      "min":-65,
     }
   }
  ]
 }
}

Java 中是否有針對此轉換的解決方案? 實際上,我們使用 Jackson 來序列化和反序列化 JSON 數據。

很抱歉,如果有相同的主題,我還沒有找到。

我不知道有任何圖書館為您做這件事,您必須自己編寫代碼:

您必須將鍵值解析為它們的元素,對於這些元素,您必須根據需要創建必要的結構,例如"Main1.del[1].x"意味着您需要

  • 一個頂級對象節點(如果它不存在就創建它),
  • 該對象中的Main1字段(如果尚不存在,則創建該字段),
  • 一個. 運算符意味着Main1是一個對象節點(如果它不存在,則創建它),
  • Main1一個del字段(如果它不存在,則創建它),
  • a [1]索引,這意味着del是一個至少具有一兩個元素的數組節點(取決於基於零或基於一的數組索引 - 如果它不存在則創建它 - 如果它太短則擴展它) ,
  • 一個. 運算符意味着數組元素是一個對象節點(如果它不存在,則創建它),
  • 數組元素對象中的x字段(如果尚不存在,則創建該字段)。

最后,將value分配給最后一個節點。

為了創建結構化 JSON 對象,您還可以將 Jackson 與ObjectNodeArrayNode等類一起使用。 但是您也可能希望在不引入另一個中間 JSON 層的情況下動態地將其創建為 POJO。

暫無
暫無

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

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