json_encode удалить кавычки из ключей? - PullRequest
6 голосов
/ 03 февраля 2010

Если я использую json_encode () для такого массива:

return json_encode(array( 'foo' => 'bar'));

Возврат:

{'foo' : 'bar'}

Ключ передается как литерал, и это запускает мой скрипт. Что мне действительно нужно, это:

{ foo : 'bar' }

Делает ли json_encode это или мне нужно самим вырезать кавычки с каким-нибудь уродливым регулярным выражением?

Ответы [ 4 ]

14 голосов
/ 03 февраля 2010

Когда я проверяю эту часть кода:

echo json_encode(array( 'foo' => 'bar'));
die;

я получаю:

{"foo":"bar"}

Что является допустимым JSON.

(Обратите внимание, что этодвойные кавычки, а не простые кавычки, как вы отправили)


Результат, который вы запрашиваете:

{ foo : 'bar' }

- допустимый Javascript, но - этонедопустимо JSON - поэтому json_encode не будет возвращать это.

См. json.org для спецификации формата JSON - которая является подмножеством Javascript, а не сам Javascript.


Вместо того, чтобы " сам вырезать кавычки с каким-то безобразным регулярным выражением ", вы должны адаптировать свой код, чтобы он принимал действительный JSON: на мой взгляд, это намного лучше.

2 голосов
/ 03 февраля 2010

Нет, json_encode не сделает этого за вас. Спецификация json специально требует, чтобы ключи были заключены в кавычки. Это сделано для того, чтобы ключи, являющиеся зарезервированными словами javascript, не нарушали объект данных.

0 голосов
/ 03 февраля 2010

Спасибо всем.Я не знал этого о спецификации JSON.На самом деле проблема была в моем сценарии, потому что я не установил тип данных моей функции $ .ajax () как «json»

Что я узнал сегодня - JSON и Javascript - это не одно и то же!*

0 голосов
/ 03 февраля 2010

Как это отключает ваш скрипт?

И согласно спецификации JSON имена ключей должны быть строками. Размещенный вами второй фрагмент недействителен в формате JSON.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...