使用JObject.Merge合并JSON文件失败,如何实现数组拼接?
问题解决:合并两个JSON文件的results数组
问题原因
- 你的代码仅在内存中完成了JObject的合并操作,但未将合并后的结果写入回原文件,因此磁盘上的1.json没有任何变化。
- 虽然你尝试设置了
MergeArrayHandling.Concat,但缺少持久化步骤,导致修改无法保存。
完整解决方案
以下是包含读取、合并、写入的完整代码:
// 读取两个JSON文件 JObject o1 = JObject.Parse(Utilities.LoadJson(@"path/to/1.json")); JObject o2 = JObject.Parse(Utilities.LoadJson(@"path/to/2.json")); // 配置合并规则:数组采用追加模式 var mergeSettings = new JsonMergeSettings { MergeArrayHandling = MergeArrayHandling.Concat }; // 执行合并 o1.Merge(o2, mergeSettings); // 将合并后的结果写入回1.json文件 using (StreamWriter writer = new StreamWriter(@"path/to/1.json")) using (JsonTextWriter jsonWriter = new JsonTextWriter(writer)) { o1.WriteTo(jsonWriter); }
补充说明
- MergeArrayHandling.Concat:该设置会将o2中的
results数组元素追加到o1的results数组末尾,正好匹配你的期望效果。 - 文件写入:必须通过
StreamWriter将内存中的JObject序列化后写入文件,否则所有修改仅停留在内存中,不会影响磁盘文件。 - 若需保留原1.json文件,可将合并结果写入新文件(如
merged.json),避免覆盖原文件。
验证合并结果
执行上述代码后,1.json的内容将与你期望的完全一致:
{ "count": 4, "next": null, "previous": null, "results": [ { "consumption": 0.004, "interval_start": "2023-07-01T07:00:00+01:00", "interval_end": "2023-07-01T07:30:00+01:00" }, { "consumption": 0.007, "interval_start": "2023-07-01T07:30:00+01:00", "interval_end": "2023-07-01T08:00:00+01:00" }, { "consumption": 0.007, "interval_start": "2023-07-01T08:00:00+01:00", "interval_end": "2023-07-01T08:30:00+01:00" }, { "consumption": 0.005, "interval_start": "2023-07-01T08:30:00+01:00", "interval_end": "2023-07-01T09:00:00+01:00" } ] }
内容的提问来源于stack exchange,提问作者user3884423
相关产品推荐
相关产品推荐

