如何使用NewtonSoft从C#中的另一个json替换json?
我有两个JSON对象-如何使用NewtonSoft从C#中的另一个json替换json?,c#,json,json.net,C#,Json,Json.net,我有两个JSON对象- json1 = { "payload": { "firstName": "John", "lastName": "Doe", "code": "test1", "arrayProp1": [1, 2, 3], "arr
json1 = {
"payload": {
"firstName": "John",
"lastName": "Doe",
"code": "test1",
"arrayProp1": [1, 2, 3],
"arrayProp2": [{
"prop1": "value1",
"prop2": "value2"
},
{
"prop1": "2_value1",
"prop2": "2_value2"
}
]
}
}
json2 = {
"payload": {
"code": "newCode",
"arrayProp1": [3,4],
"arrayProp2": [{
"prop1": "newValue1",
"prop2": "newValue2"
}
]
}
}
如果我使用内置的merge(json1.merge(json2)
),得到的结果是-
result : {
"payload": {
"firstName": "John",
"lastName": "Doe",
"code": "newCode",
"arrayProp1": [1, 2, 3, 3, 4],
"arrayProp2": [{
"prop1": "value1",
"prop2": "value2"
},
{
"prop1": "newValue1",
"prop2": "newValue2"
},
{
"prop1": "2_value1",
"prop2": "2_value2"
}
]
}
}
预期结果-
{
"payload": {
"firstName": "John",
"lastName": "Doe",
"code": "newCode",
"arrayProp1": [3, 4],
"arrayProp2": [{
"prop1": "newValue1",
"prop2": "newValue2"
}]
}
}
我想根据json2中提供的值替换json1的父属性值
我试图写一个函数,这是我目前的版本-
string Merge(string req1, string req2) {
try
{
JObject json1 = JObject.Parse(req1);
JObject json2 = JObject.Parse(req2);
foreach (var a in json2.DescendantsAndSelf())
{
if (a is JObject obj)
{
foreach (var prop in obj.Properties())
{
if(json1.SelectTokens(prop.Path).Any())
{
json1[prop.Path] = prop.Value;
}
}
}
}
req1 = json1.ToString();
}
catch(Exception ex)
{
//do nothing
}
return req1; }
这里有两个问题-
{
"payload": {
"code": "newCode",
"arrayProp1": [3, 4],
"arrayProp2": [{
"prop1": "newValue1",
"prop2": "newValue2"
}],
"payload.code": "newCode",
"payload.arrayProp1": [3, 4],
"payload.arrayProp2": [{
"prop1": "newValue1",
"prop2": "newValue2"
}],
"payload.arrayProp1[0].prop1": "newValue1",
"payload.arrayProp1[0].prop2": "newValue2"
}
}
有人能帮我一下吗?您的要求是在将两个JSON对象合并到一起时,数组内容被替换,而不是连接起来。您可以通过以下设置来实现这一点:
Concat 0连接数组。
Union 1 Union数组,跳过已存在的项。
替换2替换所有数组项。
合并3个合并数组项,按索引匹配。
特别是
MergeArrayHandling.Replace
将根据需要工作:
json1.Merge(json2, new JsonMergeSettings
{
MergeArrayHandling = MergeArrayHandling.Replace
});
演示小提琴。您是否尝试了
合并阵列处理。替换?看。@dbc我没有。我也没有看到那个帖子。让我看一下,看看上面写的是什么。谢谢大家!<代码>合并阵列处理。替换
有效,请参阅。作为一个副本关闭此问题就足够了吗?或者您想要一个专门针对MergeArrayHandling.Replace
,而另一个Q&a没有这样做吗?@dbc是的,这是有效的。非常感谢你。我没有看到重载合并函数,正在尝试编写自己的逻辑。非常感谢。你能不能把这个作为答案贴出来,这样我就可以接受了?