我正在尝试使用
JsonDiffpatch().Diff()
比较两个 JSON 字符串。
var oldJson = {"Author":"admin","Description":"","LastEditedBy":"admin","LastModifiedDate":"8/3/2023 8:53:09 AM","Name":"Export-5","RecipientEmails":"[email protected],[email protected],[email protected],[email protected],[email protected],[email protected],[email protected],[email protected],[email protected],[email protected]"};
var currentJson = {"Author":"admin","Description":"","LastEditedBy":"admin","LastModifiedDate":"8/3/2023 8:58:14 AM","Name":"Export-5","RecipientEmails":"[email protected],[email protected],[email protected],[email protected],[email protected],[email protected],[email protected],[email protected],[email protected],[email protected]"}
JToken diff = new JsonDiffPatch().Diff(JToken.Parse(oldJson), JToken.Parse(currentJson));
当字符串中没有电子邮件地址时,它可以正常工作。但是,通过电子邮件地址列表,我得到以下区别:
"LastModifiedDate": [
"8/3/2023 8:53:09 AM",
"8/3/2023 8:58:14 AM"
]
"RecipientEmails": [
"@@ -1,20 +1,19 @@\n [email protected]\n-m\n ,[email protected],aaq\n",
0,
2
]
为什么我会在输出中得到额外的字符?我怎样才能摆脱它们并给出一系列差异?
这是代码示例:
using System;
using JsonDiffPatchDotNet;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
public class Program
{
public static void Main()
{
Console.WriteLine("Hello World");
string oldJson = "{\"RecipientEmails\":\"[email protected],[email protected],[email protected],[email protected],[email protected],[email protected],[email protected],[email protected],[email protected],[email protected]\"}";
string currentJson = "{\"RecipientEmails\":\"[email protected],[email protected],[email protected],[email protected],[email protected],[email protected],[email protected],[email protected],[email protected],[email protected]\"}";
JToken diff = new JsonDiffPatch().Diff(JToken.Parse(oldJson), JToken.Parse(currentJson));
Console.WriteLine(diff);
}
}
使用简单文本差异模式:
var diff = new JsonDiffPatch(new Options
{
TextDiff = TextDiffMode.Simple
})
.Diff(JToken.Parse(oldJson), JToken.Parse(currentJson));
问题不是电子邮件,而是
RecipientEmails
的长度,似乎默认模式(TextDiffMode.Efficient
)会为长字符串生成git风格的差异。