[英]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.