#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))