[英]Convert a JSON object to another JSON object in Java
Java class JSONObject
:
我有一個JSON對象,我只想從其中提取一些鍵/值對到另一個JSON對象中。 另外,我想更改提取鍵的名稱。 最后,我要使輸出對象“平坦”(即深度1中的所有元素)。
例如:
輸入對象:
{
"a":"val_a",
"b":
{
"b1":"val_b1",
"b2":"val_b2"
},
"c":
{
"c1":"val_c1",
"c2":
{
"c21":"val_c21",
"c22":"val_c22"
}
}
}
輸出對象:
{
"x":"val_a",
"y":"val_b1",
"z":"val_c22"
}
什么是實現此目的的最佳方式(“最干凈的”)?
目前,我正在“手動”一個接一個地提取字段,例如(對於上面的示例):
JSONObject output = new JSONObject();
output.put("x",input.getString("a"));
output.put("y",input.getJSONObject("b").getString("b1"));
output.put("z",input.getJSONObject("c").getJSONObject("c2").getString("c22"));
是否有某種“正則表達式”可以幫助我“一次完成”?
給定示例的答案將不勝感激。
謝謝
有一些框架可以幫助您實現所需的目標。 問題在於它們對於像這樣的簡單工作來說太復雜了。
您可以看看Apache Camel , YQL , QL.IO , Teiid和Stardust 。 它們都是用於不同級別的數據虛擬化/集成的框架,並且可以完成任務。 問題是,您是否真的需要這樣的基礎架構?您真正擁有多少個數據轉換?
如果只有這種轉換,那么我建議您使用GSON或Apache Camel 。
您可以使用JsonPath避免低級JSONObject API調用。
添加Maven依賴項:
<dependency>
<groupId>com.jayway.jsonpath</groupId>
<artifactId>json-path</artifactId>
<version>2.2.0</version>
</dependency>
從String / File / URL / InputStream解析您的JSON:
DocumentContext doc = JsonPath.parse(String|File|URL|InputStream data);
然后,您將可以使用點或鍵表示法,無論哪種方式:
String title = doc.read("$.store.book[0].title");
要么
String title = doc.read("$['store']['book'][0]['title']");
類似於XPath中的//
,您可以使用..
獲取樹中任何位置的子節點。
該API還允許在DocumentContext中映射和重命名元素。
查看更多:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.