arrays - 使用 MergeArrayHandling.Merge 合并数组 json。如何在 newtonsoft 库中定义索引
问题描述
让我们先取2个数组:
[ {"name": "a", "innerArray": [{"first": 1, "second": 1}, {"first": 2, "second": 2},]}, {"name" : "b", "innerArray": [{"first": 1, "second": 1}, {"first": 2, "second": 2},]} ]
第二
[ {"name": "a", "innerArray": [{"first": 1, "second": 11}, {"first": 3, "second": 22},]}, {"name" : "c", "innerArray": [{"first": 1, "second": 1}, {"first": 2, "second": 2},]} ]
我想合并它们有这样的输出
[ {"name": "a", "innerArray": [{"first": 1, "second": 11}, {"first": 2, "second": 2}, {"first": 3, “第二”:22}]},{“名称”:“b”,“innerArray”:[{“第一”:1,“第二”:1},{“第一”:2,“第二”:2} ,]}, {"name": "c", "innerArray": [{"first": 1, "second": 1}, {"first": 2, "second": 2},]} ]
这可能使用 json.net 吗?我知道有 MergeArrayHandling 选项可以设置为 MergeArrayHandling.Merge ,在描述中定义为“将数组项合并在一起,按索引匹配”。但是我没有找到任何例子。
每当我尝试合并它们时,结果只是用新值替换旧值。
JArray o1 = JArray.Parse(@"first array")
JArray o2 = JArray.Parse(@"second array")
o1.Merge(o2, new JsonMergeSettings
{
MergeArrayHandling = MergeArrayHandling.Merge
});
string json = o1.ToString();
解决方案
正如它所说,合并选项基于数组索引工作,因此,例如,如果您有一个数组[1,2,3]
并[4]
选择MergeArrayHandling.Merge
选项,您将获得结果[4,2,3]
,因为两者共享一个index 0
,因此来自传入的值将接管源。如果没有共享索引,则源将保留,这解释了2,3
结果数组中的 。
要回答您的具体问题是和否,您想要的结果类似于通过 a union
orconcat
选项实现的结果,但是这些不起作用,因为它们不会像这样做那样通过对象递归merge
,实现这一目标的唯一方法是自己分解 Json 并进行单独的合并,这更详尽但在技术上是可行的。
推荐阅读
- flutter - 如何在颤动中初始化文本字段
- terraform - terraform中的案例陈述?
- jenkins - 在 jenkins shell 中运行 flutter pub get 时不允许操作
- vba - 如何让此代码适用于混合字符/数字或日期字段?
- .net - .Net SessionState 配置
- python - 如何将 Django 模板导出为 pdf
- c# - 我正在尝试在 c#/winforms 中创建一个多项选择测验,使用 sql 存储检索问题
- python - while 循环中的链接节点。(将 LeetCode 中的两个数字相加)
- ios - 在 Swift 中显示 NLTokenizer 的索引、标记
- ios - 如何在当前项目中完全删除 UIWebView 组件?