встроенный синтаксис JSON в PHP - PullRequest
6 голосов
/ 18 июля 2010

PHP был бы намного круче, если бы вы могли написать такие вещи:

$array = [2, 3, 5];

$object = { "name" : "Harry", "age" : 23, "cats" : ["fluffy", "mittens", "whiskers"]};

но я потратил много времени на поиск расширения (даже экспериментальной альфы или чего-то еще), добавляющего синтаксис json в PHP, но ничего не нашел.

Существует ли что-нибудь подобное?

Если нет, учитывая существование json_decode () и Facebook XHP , будет ли сложно написать расширение для этого?

У меня нет опыта написания расширений PHP, хотя я много занимался Си в колледже.

Ответы [ 8 ]

7 голосов
/ 18 июля 2010

Вы можете просто обернуть свою структуру данных в json_decode и покончить с этим:

$array = json_decode('[2, 3, 5]');

$object = json_decode('{
                           "name" : "Harry",
                           "age" : 23,
                           "cats" : [
                                        "fluffy", "mittens", "whiskers"
                           ]
                       }');

Да, проверка типов не выполняется до тех пор, пока не выполнится инструкция, и у вас возникнет небольшая проблема при обработке нескольких кавычек, но вы всегда можете использовать HEREDOC для этого.

5 голосов
/ 18 июля 2010

Другой синтаксис для массивов PHP был предложен и отклонен много раз раньше.

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

4 голосов
/ 18 июля 2010

Обновление: все нижеприведенное стало несколько спорным с PHP 5.4;теперь у нас есть [..] синтаксис массива.


Да, синтаксис массива PHP слишком многословен и уродлив, и я тоже хотел бы, чтобы он был более кратким.

Нет, вероятно, нетбудет хорошей идеей попытаться изменить это для существующих версий PHP, так как это особенность, которая должна быть включена в анализатор.Это означает, что ваши PHP-приложения будут работать только на пользовательских скомпилированных версиях PHP, что делает ваше приложение гораздо менее переносимым и, таким образом, сводит на нет одно из хороших преимуществ PHP.

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

Попробуйте лоббировать подобный Javascript синтаксис для PHP 6.x.До этого просто напишите array().:)

1 голос
/ 18 июля 2010

Если вы хотите написать что-то, что не является PHP, тогда используйте что-то, что не является PHP. В противном случае используйте array().

$array = array(2, 3, 5);

$object = array('name' => 'Harry', 'age' => 23, 'cats' => array('fluffy', 'mittens', 'whiskers'));
0 голосов
/ 14 сентября 2016

Если бы PHP был намного круче и просто позволял бы вам писать такие вещи, я думаю, это был бы JavaScript;) но серьезно:

Мой подход к этой проблеме - загрузить файлы json ( Получить данные из файла JSON с помощью PHP ) и просто декодировать их.

Возможно, вы могли бы также использовать инструмент сборки, такой как Grunt / Gulp и stringyfie, и вставлять отдельные json-файлы в ваш php-код. (https://florian.ec/articles/buliding-symfony2-with-gulp/)

0 голосов
/ 18 июля 2010

Как уже говорилось выше, разные языки имеют разный синтаксис - если вам не нравится синтаксис PHP, вы можете рассмотреть возможность использования других языков.

JSON означает « javascript нотация объекта» - возможно, вам нужен javascript на стороне сервера. Существует огромный набор серверных вариантов javascript - jsgi / jack (narwhal), ringojs, flusspferd, node.js, v8cgi и т. Д. И т. Д. http://wiki.commonjs.org/

0 голосов
/ 18 июля 2010

php не обрабатывает json - вот почему он дает вам инструменты для кодирования / декодирования.

Если вы отчаянно хотите «написать» таким образом, просто вставьте кавычки:

$object = '{ "name" : "Harry", "age" : 23, "cats" : ["fluffy", "mittens", "whiskers"]}';

Что касается php, то "объект json" - это не что иное, как строка ...

0 голосов
/ 18 июля 2010

Сочетание ассоциативных и числово-индексированных массивов обычно приближает вас:

$object = array("name" => "Harry", "age" => 23, "cats" => array("fluffy", "mittens", "whiskers"));

По моему мнению (особенно из-за существования json_encode) не имеет смысла писать прямой JSON поверх чего-то подобного приведенному выше.

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