Я получаю ответ JSON в запросе Ajax с сервера. Таким образом, он работает:
{"a": "1", "b": "hello 'kitty"}
Но мне не удалось поставить двойные кавычки вокруг котенка .
Когда я конвертирую "в \ x22 в ответ Ajax, он все еще интерпретируется как" по JavaScript, и я не могу разобрать JSON.
Должен ли я также избежать \ и unescape позже (что было бы возможно)?
Как это сделать?
Редактирование: я не уверен, правильно ли я это выразил: я хочу эту строку внутри «b» после синтаксического анализа:
привет "котенок"
При необходимости я мог бы добавить дополнительный шаг после разбора, чтобы преобразовать «b», но я думаю, что это необязательно, есть более элегантный способ, чтобы это произошло автоматически?
Edit2: страница ajax создается php. Я попробовал несколько вещей, чтобы создать значение b, все это приводит к ошибке разбора JSON на странице:
$b = 'hello "kitty"'; // no 1: //$b = str_replace('"',"\x22",$b); // or no 2: // $b = addslashes($b); // or no 3: $b = str_replace('"','\"',$b); echo '{ "a" : "1", "b" : "' . $b . '"}';
Edit3: Это решение, наконец, работает:
$b = 'hello "kitty"'; $b = str_replace('"','\\"',$b); echo '{ "a" : "1", "b" : "' . $b . '"}';
Просто избегайте его обратным слэшем:
> JSON.stringify({"a": 5, "b": 'a "kitty" mighty odd'}) {"a":5,"b":"a \"kitty\" mighty odd"} > JSON.parse('{"a":5,"b":"a \\"kitty\\" mighty odd"}') Object a: 5 b: a "kitty" mighty odd __proto__: Object
Анализаторы JSON распознают \"
внутри строк с двойными кавычками как двойную кавычку». Обратите внимание, что во втором примере необходим двойной обратный слэш, потому что есть парсер Javascript, а затем другой парсер JSON.
используйте только json_encode (любой элемент PHP), он автоматически анализирует.
Немного не по теме, вы можете использовать JavaScript / NodeJS на своем сервере и использовать литералы шаблонов ES6 (обратные элементы “ используются вокруг «христианских»), но через 7 лет вы, вероятно, уже используете NodeJS 🙂
var myJSON = { "name": { "first": `"Christian"`, "last": "Broberg" }, "age": 49, "skills": [ "JavaScript", "React", "NodeJS" ], "married": false, "superpowers": null }