Подтвердить что ты не робот

Как я могу поместить двойные кавычки внутри строки в ответ ajax JSON от php?

Я получаю ответ JSON в запросе Ajax с сервера. Таким образом он работает:

{ "a": "1", "b" : "hello 'kitty'" }

Но мне не удалось поставить двойные кавычки вокруг котенка.

Когда я конвертирую "в\x22 в ответе Ajax, он по-прежнему интерпретируется как" по JavaScript и я не могу разобрать JSON.

Должен ли я также избежать\и unescape позже (что было бы возможно)?

Как это сделать?

Изменить: я не уверен, правильно ли я это выразил: я хочу эту строку внутри "b" после синтаксического анализа:

hello "kitty"

При необходимости я мог бы добавить дополнительный шаг после анализа для преобразования "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 . '"}';
4b9b3361

Ответ 1

Просто избегайте его обратным слэшем:

> 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.

Ответ 2

используйте только json_encode (любой элемент PHP), он автоматически анализирует.

Ответ 3

Немного не по теме, вы можете использовать JavaScript/NodeJS на своем сервере и использовать литералы шаблонов ES6 (обратные ссылки `` используются вокруг "христианских" ), но через 7 лет вы, вероятно, уже используете NodeJS:)

var myJSON = {
    "name": {
        "first": `"Christian"`,
        "last": "Broberg"
    },
    "age": 49,
    "skills": [ "JavaScript", "React", "NodeJS" ],
    "married": false,
    "superpowers": null
}