[心得] System.Text.Json與Json.NET比較

看板C_Sharp (C#)作者 (.)時間3年前 (2020/11/10 17:59), 3年前編輯推噓0(009)
留言9則, 1人參與, 3年前最新討論串1/1
測試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://www.ptt.cc/bbs/C_Sharp/M.1605002396.A.078.html ※ 編輯: erspicu (110.26.164.32 臺灣), 11/10/2020 18:05:56

11/10 18:32, 3年前 , 1F
JSON parser為什麼要相容JS... 那就不是JSON啊
11/10 18:32, 1F

11/10 18:33, 3年前 , 2F
因為方便選擇能吃JSON也能吃JS的parser是一回事,不過這是
11/10 18:33, 2F

11/10 18:34, 3年前 , 3F
資料有問題,不是parser有問題
11/10 18:34, 3F
移除掉"var segdefs ="和註解後 就一個塞著json內容的檔案而已 不過JSON.NET比較厲害 還能相容註解 現在的重點是 移除掉註解和"var segdefs ="後 system.text.json照樣PARSE不出來

11/10 18:37, 3年前 , 4F
另外那個錯誤訊息是說JSON String只有""沒有'',JS才都有
11/10 18:37, 4F
剛用驗證器查一下問題 '+' 要改成 "+" 才能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

11/11 11:18, 3年前 , 5F
你錯了,JSON是從JS來的沒錯,但JSON的定義不是JS的物件
11/11 11:18, 5F

11/11 11:19, 3年前 , 6F

11/11 11:21, 3年前 , 7F
是有自己一套定義的,而這套定義也不完全是JS的subset
11/11 11:21, 7F

11/11 11:25, 3年前 , 8F
相容性高是方便,但不見得完全是好處,至少自己一定要清楚
11/11 11:25, 8F

11/11 11:25, 3年前 , 9F
是哪裡不一樣,不然有時候給別人錯的資料都不知道
11/11 11:25, 9F
文章代碼(AID): #1VgcIS1u (C_Sharp)
文章代碼(AID): #1VgcIS1u (C_Sharp)