2015-11-24 2 views
0

Насколько я могу судить, я получаю ошибку парсера, потому что некоторые из возвращаемых мной данных содержат апострофы.Return JsonResult с апострофами

Ошибка я получаю:

SyntaxError: Unexpected end of input at Object.parse (native) at jQuery.parseJSON...

Моя JavaScript:

var viewModel = kendo.observable({ 
    hospitalDataSource: new kendo.data.DataSource({ 
     transport: { 
      read: { 
       url: "/Hospital/GetHospitals", 
       dataType: "json", 
       type: "GET" 
      }, 
      schema: { 
       model: { 
        id: "Id", 
        fields: { 
         ProviderId: { type: "number" }, 
         Name: { type: "string" }, 
         Active: { type: "string" } 
        } 
       } 
      }, 
      errors: "errorMsg" 
     }, 
     pageSize: 10, 
     error: function (e) { 
      toastr.options = { 
       "positionClass": "toast-bottom-full-width" 
      }; 
      toastr.error('There was an error:' + e.errors, 'Uh Oh!'); 
      this.cancelChanges(); 
     }, 
     serverPaging: false, 
     serverFiltering: false, 
     serverSorting: false 
    }), 
}) 

Контроллер JsonResult:

[HttpGet] 
public JsonResult GetHospitals() 
{ 
    var hospitals = hospitalService.GetAllHospitals(); 
    return Json(hospitals, JsonRequestBehavior.AllowGet); 
} 

Как я упоминал выше, я считаю, что получаю ошибку парсера, потому что некоторые из моих данных содержат апострофы. Например, Name может включать в себя строку Women and Children's Hospital

Я еще новичок в MVC/C# и Json поэтому я не уверен, как идти о решении этого. Есть ли способ избежать всех апострофов? Или есть что-то еще, что я должен делать.

Дайте мне знать, если что-либо, что я сказал, неясно. Благодаря!

+1

Можете ли вы поделиться результат JSON? –

+0

Вы можете попробовать использовать html-кодирование для апострофов, которые должны преобразовать их в '''. – maniak1982

+0

https://msdn.microsoft.com/en-us/library/w3te6wfz(v=vs.110).aspx – maniak1982

ответ

1

Благодаря пользовательскому совать мне удалось решить эту проблему. Это не было проблемой с апострофами, а скорее, что результат JSON, который я пытался вернуть, был длиннее максимального значения, установленного по умолчанию в MVC.

Я был в состоянии использовать этот ответ, чтобы решить мою проблему: Can I set an unlimited length for maxJsonLength in web.config?

+0

Рад, что вы смогли это решить :) – poke

0

Прежде всего вам нужно избежать этих апострофов, используя str.Replace("'", "\\'"). для замены вхождений "'" с "\'"

+0

Можете ли вы объяснить, почему? Почему именно эта ошибка возникает? –

+0

AFAIK некоторые синтаксические анализаторы JSON будут интерпретировать как одиночные, так и двойные кавычки, которым не предшествует символ \ в качестве конца объекта JSON. Это сработало для меня в прошлом –

+0

Какие парсеры такие? Почему бы не использовать 'JSON.parse' в этом случае, который не имеет этой проблемы? –

0

Я не уверен, что проблема связана с апострофами, потому что json serializer должен избегать их, если это необходимо. В любом случае, чтобы заменить их, лучше сделайте это, прежде чем сериализовать коллекцию своего объекта.

[HttpGet] 
public JsonResult GetHospitals() 
{ 
    var hospitals = hospitalService.GetAllHospitals(); 

    // Replaces the apostrophes from the hospital name 
    foreach(var hospital in hospitals) { 
     hospital.Name = hospital.Name.Replace("'", ""); 
    } 

    return Json(hospitals, JsonRequestBehavior.AllowGet); 
} 

Таким образом, JSON будет возвращен без апострофов на имя.

0

Вы можете попробовать использовать HTML кодировку на апостроф, который должен преобразовать их в '

Обычно это проблема с JSON.parse() вызова или любые функции, которые полагаются на него, так как он не избежать апостроф или котировку Метки. Однако это должно быть хорошо с объектами HTML.

Если вы привыкли использовать eval() для разбора JSON, вы не видели его. Но вы действительно должны использовать JSON парсер по причинам, изложенным здесь: реализация ASP.NET

http://www.json.org/js.html

Microsoft по HTML кодирования описывается здесь.

https://msdn.microsoft.com/en-us/library/w3te6wfz(v=vs.110).aspx

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