【问题标题】:Merge 2 JSON Files Newtonsoft合并 2 个 JSON 文件 Newtonsoft
【发布时间】:2016-04-16 00:45:12
【问题描述】:

我有 2 个 json 文件或字符串,我想根据 ID 合并它们。就像加入 sql 一样。这是一个例子:

这是 Json 1:

{
    "City": [{
        "CityId": 9,
        "CityName": "Kukes"
    }, {
        "CityId": 18,
        "CityName": "Tirana"
    }, {
        "CityId": 19,
        "CityName": "Vlore"
    }, {
        "CityId": 22,
        "CityName": "temp"
    }]
}

这是我的 json 2:

{
    "Citizen": [{
        "CitizenId": 38,
        "CitizenLastName": "Bale",
        "CitizenName": "Christian",
        "City_Id": 19
    }, {
        "CitizenId": 39,
        "CitizenLastName": "ttrtrt",
        "CitizenName": "test",
        "City_Id": 18
    }, {
        "CitizenId": 42,
        "CitizenLastName": "Freeman",
        "CitizenName": "Morgan",
        "City_Id": 9
    }, {
        "CitizenId": 43,
        "CitizenLastName": "Snow",
        "CitizenName": "Jon",
        "City_Id": 9
    }, {
        "CitizenId": 44,
        "CitizenLastName": "test2",
        "CitizenName": "test",
        "City_Id": 9
    }]
}

我希望它合并到一个基于 id 的 json 文件或字符串中,如下所示:

{
    "City":
    [
        {
            "CityId":9,
            "CityName":"Kukes",
            "Citizens" : [{"CitizenId":42,"CitizenLastName":"Freeman","CitizenName":"Morgan","City_Id":9},{"CitizenId":43,"CitizenLastName":"Snow","CitizenName":"Jon","City_Id":9},{"CitizenId":44,"CitizenLastName":"test2","CitizenName":"test","City_Id":9}]
        },
        {
            "CityId":18,
            "CityName":"Tirana",
            "Citizens" : [{"CitizenId":39,"CitizenLastName":"ttrtrt","CitizenName":"test","City_Id":18}]
        },
        {
            "CityId":19,
            "CityName":"Vlore",
            "Citizens" : [{"CitizenId":38,"CitizenLastName":"Bale","CitizenName":"Christian","City_Id":19}]
        },
        {
            "CityId":22,
            "CityName":"temp",
            "Citizens" : []
        }
    ]
}

我已经尝试了一整天,但仍然一无所获。你知道如何用 Newtonsoft 做到这一点吗?还是有什么其他方式?但我喜欢 newtonsoft。

【问题讨论】:

  • 您可以创建 JSON 的 c# 对象表示并让 Newtonsoft 将 JSON 字符串放入对象中,然后使用 LINQ 执行您加入新对象,最后使用 Newtsonsoft 重新序列化您的新对象对象返回 JSON。
  • 这是一个很好的要求。那么,您的代码在编写时发生了什么?

标签: c# .net json visual-studio json.net


【解决方案1】:

您可以使用LINQ to JSON 执行此操作,使用ToLookup() 查找给定城市的所有公民:

var cities = JToken.Parse(cityJson);
var citizens = JToken.Parse(citizenJson);

var lookup = citizens.SelectTokens("Citizen[*]").ToLookup(c => (string)c["City_Id"]);

foreach (var city in cities.SelectTokens("City[*]"))
{
    city["Citizens"] = new JArray(lookup[(string)city["CityId"]]);
}

原型fiddle

要从文件中加载 JSON,然后再保存回来,请参阅 Read JSON from a fileWrite JSON to a file

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-12-25
    • 2021-03-18
    • 1970-01-01
    • 2022-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多