2013-04-26 87 views
0

我有一個對象與屬性包含引號(「),斜槓(/)或Environmental.NewLine無效的JSON解析器錯誤

我寫這個對象的JSON字符串並嘗試將其分配給jqGrid的。

但它顯示Invalid JSON Parser error

我怎樣才能成功地解析這個。

myObj=new {[email protected]"Samp'le value"} 

在ASP.Net MVC中,return JSON(myObj)用於構建JSON。

做任何人有任何想法,我們需要配置處理這個'/Environmental.NewLine(\n)解析JSON時?

我們需要使用任何其他庫來處理像Newtosoft JSON

JSON從服務器

 {"total":1 ,"page":1,"records":3,"rows":[{"i":0,"cell":"","1","1","DesSinglApostropAndURLhasEnterKeyChar", 
"Samp'le value","http://google.com/Dashboard.aspx?ParcelNbr= {SITE_APN}","False","",""]},"i":1,"cell":"","2","2","DesWithSlashAndURLwithSlash", 
"Sample\value2","http://Googole.com/Dashboard.aspx?ParcelNbr={SITE_APN}&ABC=\XYZ","False","",""]},{"i":2,"cell":["","3","3","DesWithAmpersand","Sample & value3"","http://Googole.com","False","",""]}]} 
+2

你能提供樣品嗎? – 2013-04-26 04:01:49

+0

@Garath在代碼 – Billa 2013-04-26 04:07:51

+0

中添加了示例JSON構造「我怎樣才能成功解析它」?在JavaScript?該對象將被序列化成json,並且可以在你想要的js中使用它。你對json對象做了什麼,它給你一個錯誤? – 2013-04-26 04:15:27

回答

3

對應於規範(見herehere)僅"\字符必須逃脫。其他一些字符可能會被轉義。所以非轉義'字符不是一個錯誤。我想這是錯誤「無效的JSON解析器錯誤」的另一個原因。

您應該包含更多完整的JavaScript代碼,其中顯示瞭如何使用jqGrid,ASP.NET MVC控制器操作的代碼或更完整的JSON響應,它返回服務器。一般而言,您可以在不使用Json.NET(Newtosoft)或使用它或任何其他庫的情況下生成正確的JSON響應。

您應該包含autoencode: true選項以在jqGrid中正確顯示任何文本數據。您應該使用datatype: "json"jsonReader選項(請參閱the documentation)。所以僅僅爲了生成良好的格式化JSON或XML數據以在jqGrid中正確顯示數據是不夠的。可能需要包含jqGrid選項,它提供有關數據確切格式的信息。

已更新:您發佈的JSON數據確實已損壞。 jsonlint.org是一個可以驗證JSON數據的好地方。也許你嘗試手動產生JSON數據,因爲該數據是絕對錯誤的:

{ 
    "total": 1, 
    "page": 1, 
    "records": 3, 
    "rows": [ 
     { 
      "i": 0, 
      "cell": "", <---- it must be "cell": ["" 
      "1", 
      "1", 
      "DesSinglApostropAndURLhasEnterKeyChar", 
      "Samp'le value", 
      "http://google.com/Dashboard.aspx?ParcelNbr= {SITE_APN}", 
      "False", 
      "", 
      "" 
     ] 
    }, 
    "i": 1, <--- it must be {"i": 1 
    "cell": "", 
    "2", 
    "2", 
    "DesWithSlashAndURLwithSlash", 
    "Sample\value2", <--- it must be "Sample\\value2" or "Sample value2" 
    "http://Googole.com/Dashboard.aspx?ParcelNbr={SITE_APN}&ABC=\XYZ", <--- \XYZ is WRONG 
    "False", 
    "", 
    "" 
] 
}, 
{ 
"i": 2, 
"cell": [ 
    "", 
    "3", 
    "3", 
    "DesWithAmpersand", 
    "Sample & value3"","http: //Googole.com","False","",""]}]} <-- "Sample & value3"" is WRONG 

數據包含5個語法錯誤:

使用的 "cell": ""
  • ,而不是"cell": [""使用的}, "i": 1,
  • ,而不是}, {"i": 1,
  • 使用"Sample\value2"而不是"Sample value2""Sample\\value2"
  • 用法"http://Googole.com/Dashboard.aspx?ParcelNbr={SITE_APN}&ABC=\XYZ"代替"http://Googole.com/Dashboard.aspx?ParcelNbr={SITE_APN}&ABC=XYZ""http://Googole.com/Dashboard.aspx?ParcelNbr={SITE_APN}&ABC=\\XYZ"
  • 用法的"Sample & value3""Sample & value3\""

"Sample & value3""代替而且你使用i屬性,而不是id"i": 1必須固定"id": 1)。這在JSON中不是錯誤,但是您應該爲jqGrid生成數據,因此您應該保留jqGrid預期的格式。見the documentation。固定JSON響應應該是這樣的

{ 
    "total": 1, 
    "page": 1, 
    "records": 3, 
    "rows": [ 
     { 
      "id": 0, 
      "cell": [ 
       "", 
       "1", 
       "1", 
       "DesSinglApostropAndURLhasEnterKeyChar", 
       "Samp'le value", 
       "http://google.com/Dashboard.aspx?ParcelNbr= {SITE_APN}", 
       "False", 
       "", 
       "" 
      ] 
     }, 
     { 
      "id": 1, 
      "cell": [ 
       "", 
       "2", 
       "2", 
       "DesWithSlashAndURLwithSlash", 
       "Sample value2", 
       "http://Googole.com/Dashboard.aspx?ParcelNbr={SITE_APN}&ABC=XYZ", 
       "False", 
       "", 
       "" 
      ] 
     }, 
     { 
      "id": 2, 
      "cell": [ 
       "", 
       "3", 
       "3", 
       "DesWithAmpersand", 
       "Sample & value3", 
       "http: //Googole.com", 
       "False", 
       "", 
       "" 
      ] 
     } 
    ] 
} 

我建議你分析與jqGrid的使用ASP.NET MVC的例子代碼(見here例如),並解決您的服務器代碼。

+0

感謝和偉大的奧列格!如果我無法解決,我會再次看到我的代碼並回復給您。 – Billa 2013-04-26 06:29:46

+0

Hello Oleg,我已經更新了服務器的JSON – Billa 2013-04-27 05:13:34

+0

@Billa:您發佈的JSON數據是完全錯誤的。你永遠不應該對JSON進行手動序列化。有關詳細信息,請參閱** UPDATED **部分答案。 – Oleg 2013-04-27 08:54:07