2013-04-26 4 views
0

У меня есть объект со свойством содержит кавычки ('), слэш (/) или Environmental.NewLineInvalid JSON Parser Ошибка

Я построил этот объект как 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

Не могли бы вы предоставить образец? –

+0

@ Garath добавил образец конструкции JSON в код – Billa

+0

«Как я могу проанализировать это успешно»? В javascript? Этот объект будет сериализован в json просто отлично и может использоваться в js в любом случае, если вы этого хотите. Что именно вы делаете с объектом json, что он дает вам ошибку? –

ответ

3

Соответствует спецификации (см here или here) только " и \ символы должны быть убежали. Некоторые другие символы может быть сбежал. Поэтому символ unescaped ' не является ошибкой. Я полагаю, что есть еще одна причина ошибки «Недопустимая ошибка JSON Parser».

Вы должны включить более полный код JavaScript, который показывает, как вы используете jqGrid, код действия ASP.NET MVC или более полный ответ JSON, который возвращает сервер. В общем случае вы можете получить правильный ответ JSON без Json.NET (Newtosoft) или с ним или с любой другой библиотекой.

Вы должны включить опцию 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", 
       "", 
       "" 
      ] 
     } 
    ] 
} 

Я рекомендую вам проанализировать код примеров использования ASP.NET MVC с jqGrid (см here, например) и исправить код сервера.

+0

Спасибо и большое Олегу! Я снова увижу свой код и вернусь к вам, если я не смогу решить проблему. – Billa

+0

Здравствуйте, Олег, я обновил JSON с сервера – Billa

+0

@Billa: данные JSON, которые вы опубликовали, абсолютно ошибочны. Вы никогда не должны делать ручную сериализацию JSON. Подробнее см. ** ОБНОВЛЕНО ** часть моего ответа. – Oleg

Смежные вопросы