合并两个JSON文件,其中一个占主导地位的文件覆盖值

kmb7vmvb  于 2023-11-20  发布在  其他
关注(0)|答案(2)|浏览(125)

我想把我的JSON合并成一个,而占主导地位的一个JSON值。
范例:
从属JSON:

{
    "test": {
        "test1": true,
        "test2": {
            "test3": [1, 2, 3]
        }
    }
}

字符串
主导JSON:

{
    "test": {
        "test2": null,
        "test3": "string"
    },
    "test2": "newValue"
}


合并结果:

{
    "test": {
        "test1": true,
        "test2": null,
        "test3": "string"
    },
    "test2": "newValue"
}


用哪个命令可以轻松完成?

ljo96ir5

ljo96ir51#

我使用Newtonsoft.Json库。
您可以使用JObject.Merge方法将合并两个JSON对象合并为一个,并指定如何处理两个对象中不存在的值。
下面是一个示例代码,展示了如何做儿子:

using Newtonsoft.Json.Linq;

JObject sub = JObject.Parse(@"{ ““test””: { "“test1"”: true, "“test2"”: { ““test3"”: [1, 2, 3] } } }”);

JObject dom = JObject.Parse(@"{ ““test””: { "“test2"”: null, "“test3"”: ““string”” }, ““test2"”: ““newValue”” }”);

// Merge the two JSONs using Merge method 
JObject merged = dom.Merge(sub, new JsonMergeSettings() {  = MergeArrayHandling.Keep, ReplaceNullValuesWith = null });

// Convert the result to string for visualization:
string result = JsonConvert.SerializeObject(merged);

// Print the result Console.WriteLine(result);
// output:
// { “test”: { “test1”: true, “test2”: null, “test3”: “string” }, “test2”: “newValue” }

字符串

0s7z1bwu

0s7z1bwu2#

感谢@Ariel Szmerla给出答案,但看起来它已经过时了。对于C#10和Newtonsoft.Json v13.0.3,我使用了以下代码:

JObject sub = JObject.Parse(@"{ ""test"": { ""test1"": true, ""test2"":  15, ""test3"": { ""test4"": [1, 2, 3] } } }");

        JObject dom = JObject.Parse(@"{ ""test"": { ""test2"": 16, ""test3"": ""string"" }, ""test5"": ""newValue"" }");

        JObject merged;
        {
            merged = (JObject)sub.DeepClone();
            merged.Merge(dom, new JsonMergeSettings() {MergeNullValueHandling = MergeNullValueHandling.Merge, MergeArrayHandling = MergeArrayHandling.Replace});
        }
        
        return merged.ToObject<T>();

字符串

相关问题