JSON, несомненно, является гибким способом обмена данными между системами. Но это не значит, что JSON можно создать любым способом.
Вот несколько лучших практик, которые помогут вашим потребителям использовать вашу продукцию.
Вложите в ДВОЙНЫЕ цитаты
Всегда заключайте пару Ключ: Значение в двойные кавычки. Может быть удобно (не знаю, как) генерировать с использованием одинарных кавычек, но парсер JSON не любит анализировать JSON. объекты в одинарных кавычках.
Для числовых значений кавычки необязательны, но рекомендуется заключать их в двойные кавычки.
{'id': '1','name':File} is not right ✘ {"id": 1,"name":"File"} is okay ✓ {"id": "1","name":"File"} is the best ✓
Пожалуйста, без дефисов
Никогда Никогда Никогда не используйте дефисы в ключевых полях. Он нарушает работу синтаксического анализатора Python и Scala, и разработчикам приходится его избегать, чтобы использовать эти поля.
Вместо дефисов используйте символы подчеркивания (_). Но лучше всего использовать более низкий или верблюжий футляр. См. Примеры ниже.
{"first-name":"Rachel","last-name":"Green"} is not right. ✘ {"first_name":"Rachel","last_name":"Green"} is okay ✓ {"firstname":"Rachel","lastname":"Green"} is okay ✓ {"firstName":"Rachel","lastName":"Green"} is the best. ✓
Всегда создавайте корневой элемент.
Создание корневого элемента необязательно, но это помогает при генерации сложного JSON.
JSON with root element { "menu": [ { "id": "1", "name":"File", "value": "F", "popup": { "menuitem": [ {"name":"New", "value": "1N", "onclick": "newDoc()"}, {"name":"Open", "value": "1O", "onclick": "openDoc()"}, {"name":"Close", "value": "1C", "onclick": "closeDoc()"} ] } }, { "id": "2", "name":"Edit", "value": "E", "popup": { "menuitem": [ {"name":"Undo", "value": "2U", "onclick": "undo()"}, {"name":"Copy", "value": "2C", "onclick": "copy()"}, {"name":"Cut", "value": "2T", "onclick": "cut()"} ] } } ] } JSON without root element [ { "id": "1", "name":"File", "value": "F", "popup": { "menuitem": [ {"name":"New", "value": "1N", "onclick": "newDoc()"}, {"name":"Open", "value": "1O", "onclick": "openDoc()"}, {"name":"Close", "value": "1C", "onclick": "closeDoc()"} ] } }, { "id": "2", "name":"Edit", "value": "E", "popup": { "menuitem": [ {"name":"Undo", "value": "2U", "onclick": "undo()"}, {"name":"Copy", "value": "2C", "onclick": "copy()"}, {"name":"Cut", "value": "2T", "onclick": "cut()"} ] } } ]
Предоставьте образец META
Идея JSON заключается в гибкости, поэтому вам не нужно ограничивать поток данных несколькими столбцами.
Но в то же время, если вы предоставляете большой набор данных с вложенными уровнями, потребитель сойдет с ума. Предоставьте им мета / образец, чтобы они могли понять, какие данные искать, а какие пропустить.
{ "menu": [ { "id": "1", "name":"File", "value": "F", "popup": { "menuitem": [ {"name":"New", "value": "1N", "onclick": "newDoc()"}, {"name":"Open", "value": "1O", "onclick": "openDoc()"}, {"name":"Close", "value": "1C", "onclick": "closeDoc()"} ] } }, { "id": "2", "name":"Edit", "value": "E", "popup": { "menuitem": [ {"name":"Undo", "value": "2U", "onclick": "undo()"}, {"name":"Copy", "value": "2C", "onclick": "copy()"}, {"name":"Cut", "value": "2T", "onclick": "cut()"} ] } } ] }
Мета-образец может быть
menu.id: integer - уникальный идентификатор
menu.name: string - имя меню
menu.value: string - внутренний идентификатор меню
menu.popup.menuitem.name: string - название подменю
menu.popup.menuitem.value: string - промежуточный идентификатор подменю
menu.popup.menuitem.onclick: string - клиентское событие подменю
Проверка вывода JSON
Использование инструментов командной строки, таких как ajv-cli / jsonlint (может быть установлено через любой менеджер пакетов), устранит проблемы для потребителей.
Похожие статьи