作者erspicu (.)
看板C_Sharp
标题[心得] System.Text.Json与Json.NET比较
时间Tue Nov 10 17:59:53 2020
测试JSON
https://github.com/trebonian/visual6502/blob/master/segdefs.js
下载後要移除开头 "var segdefs =" 字串
json.net 测试环境
.net framework 4.8
nuget 安装最新 Newtonsoft.Json 12.0.3
try
{
string json_str = File.ReadAllText(Application.StartupPath +
@"\segdefs.js");
object json_obj = JsonConvert.DeserializeObject<object>
( json_str );
Console.WriteLine(st.ElapsedMilliseconds);
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
顺利parse成物件 经测试能相容 /*....*/ 或是 // js的注解
system.text.json测试环境
.NET Core 3.1
try
{
string json_str = File.ReadAllText(Application.StartupPath +
@"\segdefs.js");
object json_obj =
JsonSerializer.Deserialize<object>(json_str);
Console.WriteLine(st.ElapsedMilliseconds);
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
无法处理JS /* .... */ 或是 // 注解 另外PARSE失败
例外讯息
''' is an invalid start of a value. Path: $ |
LineNumber: 1 | BytePositionInLine: 6.
我是搞不太懂原因 不知道是不是单一资料量太大 或是
SAMPLE档格式有些规范标准问题
测试过小一点的其他JSON档是OK
目前测试一下马上踩雷..... 假若system.text.json处理JSON上有些问题
建议回到JSON.NET试试看
因为连PARSE都有问题 就不做速度上的比较了
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 110.26.164.32 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/C_Sharp/M.1605002396.A.078.html
※ 编辑: erspicu (110.26.164.32 台湾), 11/10/2020 18:05:56
1F:→ ssccg: JSON parser为什麽要相容JS... 那就不是JSON啊 11/10 18:32
2F:→ ssccg: 因为方便选择能吃JSON也能吃JS的parser是一回事,不过这是 11/10 18:33
3F:→ ssccg: 资料有问题,不是parser有问题 11/10 18:34
移除掉"var segdefs ="和注解後 就一个塞着json内容的档案而已
不过JSON.NET比较厉害 还能相容注解
现在的重点是 移除掉注解和"var segdefs ="後
system.text.json照样PARSE不出来
4F:→ ssccg: 另外那个错误讯息是说JSON String只有""没有'',JS才都有 11/10 18:37
刚用验证器查一下问题 '+' 要改成 "+" 才能pass 看来JSON.NET宽容很多
理论上JSON定义就是JAVASCRIPT的物件
不过真的JAVASCRIPT内可以用的JSON好像又不一定完全符合某些RFC规范
但很多时候用资料时候会把JS的资料直接挪用过去
看来这时候是JSON.NET好用一点
※ 编辑: erspicu (110.26.164.32 台湾), 11/10/2020 21:20:54
後续还有一个规范问题 不允许 array , 号後没有item
把最後多余的 , 号删除掉後 范例可以在 system.text.json 上parse
测试速度 system.text.json 效率的确比较好 40ms左右
而Josn.net 大概会在200ms左右 足足快了将近5倍
不过JSON.NET处理宽容度真的高 如果从网路上抓JS内资料要用
遇到一些格式问题懒得修正 大概是JSON.NET理想 速度的话推荐system.text.json
※ 编辑: erspicu (110.26.164.32 台湾), 11/10/2020 22:55:19
5F:→ ssccg: 你错了,JSON是从JS来的没错,但JSON的定义不是JS的物件 11/11 11:18
7F:→ ssccg: 是有自己一套定义的,而这套定义也不完全是JS的subset 11/11 11:21
8F:→ ssccg: 相容性高是方便,但不见得完全是好处,至少自己一定要清楚 11/11 11:25
9F:→ ssccg: 是哪里不一样,不然有时候给别人错的资料都不知道 11/11 11:25