Является ли использование @attributes в JSON нестандартным или стандартным? - PullRequest
1 голос
/ 11 мая 2011

Мы добавляем вывод JSON в существующий API, который выводит XML, чтобы упростить интеграцию MobileHTML.Однако наш разработчик запросил использование @attributes, появляющихся в выходных данных JSON.

Наш оригинальный XML выглядит следующим образом:

<markers>
    <marker id="11906" latitude="52.226578"
    ...

, поэтому JSON выглядит как:

callbackname({"marker":[{"@attributes":{"id":"11906","latitude":"52.226578"
....

Наш разработчик заявил:

"Хотя '@attributes' является допустимым JSON, кажется, что он нарушает точечную запись, поэтому я не могу вызвать данные. @ Атрибуты. Я могу позвонитьdata ['@ attribute'], так что есть обходной путь, но кажется более безопасным просто избегать @ -символа, если только для этого нет веской причины. "

XML-> JSON (P) преобразование выполняется с использованием:

$xmlObject = simplexml_load_string ($data);
$data = json_encode ($xmlObject);

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

Является ли использование @attributes нестандартным?Является ли это просто той проблемой, что наш API немного сломан с точки зрения использования <marker id..> вместо <marker><id>?

1 Ответ

3 голосов
/ 11 мая 2011

Стандарт JSON определяет только то, что является и не является действительным;это не устанавливает соглашения.Нет ничего плохого в использовании имен свойств, которые не являются допустимыми идентификаторами Javascript.

Однако, как отмечает ваш разработчик, использование результата в JS делает его немного более неловким, поскольку делает невозможнымиспользуйте точечную запись. Сжимая руку , использование атрибутов для простого контента обычно рассматривается как «хороший XML», и вы используете встроенные инструменты по умолчанию для преобразования из XML в JSON.Я бы посчитал это достаточно веской причиной, чтобы оставить все как есть.

Если бы это был я, я бы посмотрел на то, как трудно было бы реализовать собственный конвертер XML -> JSON.Если это просто и понятно, идите по этому пути и избегайте @attribute (это также, вероятно, сделает ваш JSON меньше и проще).Однако, если это слишком хлопотно, пропустить точечные обозначения - это не конец света.В худшем случае var attr = data.marker["@attributes"]; обойдет проблему.

...