首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何基于公共密钥有效合并两个JSON字符串

如何基于公共密钥有效合并两个JSON字符串
EN

Stack Overflow用户
提问于 2022-09-08 16:17:11
回答 1查看 65关注 0票数 0

我有两个JSON字符串,本质上是JSONObject数组。两个JSON字符串的结构和键如下:

JSON-1:

代码语言:javascript
复制
[
    {
        "title": "ABC",
        "edition": 7,
        "year": 2011
    },
    {
        "title": "DEF",
        "edition": 2,
        "year": 2012
    },
    {
        "title": "XYZ",
        "edition": 3,
        "year": 2013
    }
]

和,JSON-2:

代码语言:javascript
复制
[
    {
        "title": "ABC",
        "price": "20"
    },
    {
        "title": "DEF",
        "price": "20"
    },
    {
        "title": "XYZ",
        "price": "20"
    }
]

这两个JSON都有一个公共密钥"title",我希望在此基础上合并这两个JSON,要么将JSON-2值合并到JSON-1中,要么创建一个具有合并结果的JSON对象。

合并的结果如下所示:

代码语言:javascript
复制
[
    {
        "title": "ABC",
        "edition": 7,
        "year": 2011,
        "price": "20"
    },
    {
        "title": "DEF",
        "edition": 2,
        "year": 2012
        "price": "20"
    },
    {
        "title": "XYZ",
        "edition": 3,
        "year": 2013
        "price": "20"
    }
]

如何通过最小循环和最小对象创建来实现这一点?我也不能使用实体/模型类。这样做的目的是不创建任何模型类。

注意:我不能使用Gson,因为我没有批准使用Gson。

  1. 我尝试使用List<JSONObject> listObj = objectMapper.readValue(jsonOneString, new TypeReference<List<JSONObject>>(){});,但是我得到了一个未知的属性异常。

  1. 我尝试了JsonNode node = objectMapper.readTree(jsonOneString);,但我不能再继续下去了。

我知道我在这里做的事情效率很低,所以寻找不使用实体类、最小新对象创建和最小循环的方法。敬请指教。

更新:我稍微修改了一下下面的代码:

代码语言:javascript
复制
if (json1elem.get("title")!=null 
        && json2elem.get("title")!=null 
            && json1elem.get("title").equals(json2elem.get("title"))) {

    //
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-09-08 17:25:15

代码语言:javascript
复制
JsonNode json1 = objectMapper.readTree(jsonOneString);
JsonNode json2 = objectMapper.readTree(jsonTwoString);
for (JsonNode json1elem : json1) {
    for (JsonNode json2elem : json2) {
        if (json1elem.get("title").equals(json2elem.get("title"))) {
            ((ObjectNode) json1elem).setAll((ObjectNode) json2elem);
            break;
        }
    }
}
System.out.println(json1.toPrettyString());
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73652218

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档