Как я могу поместить двойные кавычки в строку в ответ JSON ajax от php? - PullRequest
40 голосов
/ 28 апреля 2010

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

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

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

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

Должен ли я также выйти из \ and 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 . '"}';

Ответы [ 3 ]

56 голосов
/ 28 апреля 2010

Просто убери его с обратной косой чертой:

> 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 голосов
/ 28 апреля 2010

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

0 голосов
/ 29 июня 2017

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

var myJSON = {
    "name": {
        "first": `"Christian"`,
        "last": "Broberg"
    },
    "age": 49,
    "skills": [ "JavaScript", "React", "NodeJS" ],
    "married": false,
    "superpowers": null
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...