JSON.parse: ожидаемое имя свойства или ‘}’

#json #parsing

#json #синтаксический анализ

Вопрос:

Данные содержат (/ amp;quot; /):

  {"test":"101","mr":"103","bishop":"102"}
  

скрипт:

 console.log($.parseJSON(result));
  

Я получаю ошибку,

 JSON.parse: expected property name or '}'.
  

Комментарии:

1. Основываясь на сообщении об ошибке, возможно, у вас там есть апостроф без кавычек? Они должны быть экранированы с помощью обратной косой черты или экранирования в Юникоде (u0027)

2. извините, что это тип, там у меня есть только »

3. Отправленный вами JSON является чистым. Пожалуйста, отредактируйте, чтобы отразить фактическую строку JSON, если она отличается.

4. Что вы подразумеваете под «Данными, содержащими (/amp;quot/)»?

5. {«Председатель правления»: «1», «Генеральный менеджер»: «10»} это то, что я получаю.

Ответ №1:

Была такая же проблема при использовании одинарных кавычек в файле JSON, изменен на двойные кавычки для всех строковых свойств / значений, и теперь все работает нормально.

Изменить:

 JSON.parse("{'wrongQuotes': 5}") 
  

Для:

 JSON.parse('{"rightQuotes": 5}')
  

Комментарии:

1. Такая глупая вещь! Вы правы. Этот не сработал: JSON.parse(«{‘ple’: 2}»), Но этот сработал: JSON.parse(‘{«ple»: 2}’)

2. Спасибо, приятель, echo «{‘success’: false}»; не сработало, echo ‘{«success»: false}’; сработало. 🙂

3. @Pithikos, спецификация JSON требует двойных, а не одинарных кавычек. Это просто способ определения спецификации: json.org

4. @JonathanM спасибо. Хотя мой вопрос был риторическим. Я просто ожидаю, что ответчик предоставит дополнительную информацию о том, ЗАЧЕМ нужны двойные кавычки 🙂

5. С опозданием на год, но когда я использовал JSON.stringify(), я получил » вместо кавычек. Это было исправлено с помощью string.replace(/»/g, ‘»‘) Примечание: замена — ‘ » ‘, без пробелов

Ответ №2:

Если вы получаете JSON с закодированным amp;quot; , вам придется заменить каждый экземпляр amp;quot; на true " перед выполнением JSON.parse . Что-то вроде:

 myJSONstring.replace(/amp;quot;/ig,'"');
  

Комментарии:

1. 1 сделал работу за меня. знаете ли вы причину появления «? Являе тся ли это тем, что браузер помещает их, поскольку mimetype не является javascript или json со стороны сервера?

2. @Sid, зависит от того, где и как вы получаете JSON. Возможно, кто-то неправильно закодировал программирование на сервере, чтобы URL кодировал строку JSON.

Ответ №3:

Мой случай был еще проще.

Перепутав JSON с обычным JS, я не заключил ключи объекта в двойные кавычки.

❌:

 {
    title: "Hello World!"
}
  

✅:

 {
    "title": "Hello World!"
}
  

Ирония в том, что Postman даже подчеркнул это для меня, но я проигнорировал. Ответом является Sleep.

Комментарии:

1. То же самое здесь, это так просто не заметить.

Ответ №4:

Для всех, кто использует laravel blade и объявляет переменную JS в представлении.

Вам нужно использовать:

 var json = JSON.parse('{!! $json !!}');
  

В противном случае вы получите эту ошибку из-за того, что кавычки анализируются как »

Ответ №5:

Изменить
{"test":"101","mr":"103","bishop":"102"}
Для
'{"test":"101","mr":"103","bishop":"102"}'

если это поступает с сервера (PHP)
то есть <?php $php_var = ["test" => "101", "mr" => "103", "bishop" => "102"]?>

затем в Javascript end
var javascript_var = $.parseJSON('<?= json_encode($php_var) ?>') ;

Ответ №6:

 /* suppose your json are single quote, it's necessary replace it single quote before, a simple example*/

let ojson = "{'name':'peterson'}";
ojson = ojson.replace(/'/g, '"');
ojson = JSON.parse(ojson);
console.log(ojson['name'])
  

Ответ №7:

например, если вы получите что-то вроде этого

{ «местоположение»: «{‘широта’: 4.6351144, ‘lng’: -74.12011199999999}» }

с вашего сервера или недавно получен неверно преобразованный формат. сначала получите вашу строку

 myItemString = "{'lat': 4.6351144, 'lng': -74.12011199999999}"
  

и измените ключи с помощью replace, а позже json.parse,
‘ключ’ к —> «ключ»

      const key1 = myItemString.replace("'lat'",'"lat"')
      const key12 = key1.replace("'lng'", '"lng"');
      const obj = JSON.parse(key12)
      console.log(obj)
  

Ответ №8:

Вы можете попробовать использовать stringifying перед синтаксическим анализом: JSON.parse(JSON.stringify(result))