如何在json.net中合并两个json文档?

sti*_*ler 3 c# json json.net

我不确定正确的术语,因为对 json 不太了解。我有一个以下固定格式的现有 json 字符串/对象(即所有项目都位于根级别并且具有简单的键/值对,尽管项目的数量可能有所不同):

{
  "product_id": "1777",
  "license_key": "ECHOES-SILENCE-PATIENCE-AND-GRACE",
  "valid_for": "365",
  "status": "active",
  "times_activated_max": 1
}
Run Code Online (Sandbox Code Playgroud)

我需要一种方法来添加传递到方法中的不同架构/格式的 json 字符串。该对象可以是任何 json 格式。它将被添加到根中。例如添加这个:

{
"name":"John",
"age":30,
"cars":["Ford", "BMW", "Fiat"]
}
Run Code Online (Sandbox Code Playgroud)

..将变成这样:

{
  "product_id": "1777",
  "license_key": "ECHOES-SILENCE-PATIENCE-AND-GRACE",
  "valid_for": "365",
  "status": "active",
  "times_activated_max": 1
  "name":"John",
  "age":30,
  "cars":["Ford", "BMW", "Fiat"]
}
Run Code Online (Sandbox Code Playgroud)

我可以使用 Newtonsoft.Json 来完成此任务。

我确实读过这篇文章,但无法将其映射到我的问题。

希望有人可以帮忙

Pan*_*vos 7

JSON.NET 文档有一篇专门针对此内容的文章:合并 JSON。您可以使用JObject.Merge将两个不同的对象合并为一个:

JObject o1 = JObject.Parse(@"{
  'FirstName': 'John',
  'LastName': 'Smith',
  'Enabled': false,
  'Roles': [ 'User' ]
}");
JObject o2 = JObject.Parse(@"{
  'Enabled': true,
  'Roles': [ 'User', 'Admin' ]
}");

o1.Merge(o2, new JsonMergeSettings
{
    // union array values together to avoid duplicates
    MergeArrayHandling = MergeArrayHandling.Union
});
Run Code Online (Sandbox Code Playgroud)

您发布的是两个对象。JSON 文档可能是文本,但它包含的是数组和对象。“合并”意味着找到一种方法来组合这些对象/数组并生成新的数组或对象。

Merge由JContainer定义,JContainer 是 JObject 和 JArray 的父级。这意味着您可以用来Merge合并数组和对象。

数组的另一种选择是组合Enumerable.Union两个数组的内容,并创建一个新数组:

var array1= JArray.Parse("[1,2,3]");
var array2= JArray.Parse("[3,4,5, \"a\"]");

var array3=new JArray(array1.Union(array2));
Run Code Online (Sandbox Code Playgroud)

这返回[1,2,3,4,5,"a"]