Кратко
СкопированоJSON — самый популярный формат обмена данными между приложениями. Этот формат очень похож на объекты JavaScript. Объекты легко трансформируются в JSON для отправки на сервер.
Как пишется
Скопировано{ "brand": "Apple", "model": "iPhone 11 Pro", "isAvailable": true, "display": 5.8, "memories": [64, 256, 512], "features": { "tripleCamera": true, "faceId": true, "touchId": false, "eSIM": true }}
{ "brand": "Apple", "model": "iPhone 11 Pro", "isAvailable": true, "display": 5.8, "memories": [64, 256, 512], "features": { "tripleCamera": true, "faceId": true, "touchId": false, "eSIM": true } }
JSON состоит из пар ключ-значение. Пары разделяются между собой запятыми — ,
, а ключ отделяется от значения через двоеточие — :
. Ключом может быть только строка, обёрнутая в двойные кавычки. А вот значением — почти всё что угодно:
- Строка в двойных кавычках —
"
;I love J S O N!" - Число —
21
; - Логические значения —
true
иfalse
; - Массив —
[18
;, true , "lost" , [ 4 , 8 , 15 , 16 , 23 , 42 ] ] - Объект —
{"is
.Valid" : true , "is Payed" : false} null
JSON основан на JavaScript, но остаётся независимой от языка спецификацией для данных.
Как понять
СкопированоJSON определяет небольшой набор правил форматирования для представления основных типов данных и может применяться почти с любым языком программирования.
Спецификация формата JSON определена стандартом ECMA-404. А то, как JSON используется в JavaScript, описывает Спецификация ECMAScript.
В процессе преобразования JavaScript-объекта в JSON не попадут:
- Поля со значением, равным примитивам
undefined
илиSymbol
; - Функции (методы объектов) —
{greetings
;( ) {alert ( " Hello World!" ) }} - Поля с
Symbol
-ключами.
Некоторые значения преобразуются в null
:
- Поля со значением, равным «специальным» числам»
Infinity
иNaN
; - Элементы полей-массивов, равные
undefined
.
Значения, равные объектам Map
и Set
, будут преобразованы в {}
.
JSON используется для того, чтобы получить данные от сервера. Типичная схема работы:
- Отправляем запрос на сервер;
- Ждём ответ;
- Получаем JSON с набором данных;
- Превращаем JSON в объект JavaScript;
- Используем данные.
Пример:
Преобразование в JSON
СкопированоДля того что бы превратить данные в JSON-код, используйте метод JSON
. Первым аргументом метод принимает значение, которое нужно преобразовать.
Преобразуем JavaScript-объект в JSON:
const hero = { nickname: "BestHealerEver", level: 7, age: 141, race: "Gnome", isImmortal: false, things: ["sword", "helmet", "belt"], money: { gold: 6387, silver: 1264, bronze: 931, diamonds: 2, },}console.log(typeof hero)// objectconsole.log(typeof JSON.stringify(hero))// stringconsole.log(JSON.stringify(hero))// '{"nickname":"BestHealerEver","level":7,"age":141,"race":"Gnome","isImmortal":false,"things":["sword","helmet","belt"],"money":{"gold":6387,"silver":1264,"bronze":931,"diamonds":2}}'
const hero = { nickname: "BestHealerEver", level: 7, age: 141, race: "Gnome", isImmortal: false, things: ["sword", "helmet", "belt"], money: { gold: 6387, silver: 1264, bronze: 931, diamonds: 2, }, } console.log(typeof hero) // object console.log(typeof JSON.stringify(hero)) // string console.log(JSON.stringify(hero)) // '{"nickname":"BestHealerEver","level":7,"age":141,"race":"Gnome","isImmortal":false,"things":["sword","helmet","belt"],"money":{"gold":6387,"silver":1264,"bronze":931,"diamonds":2}}'
Результатом конвертации будет строка.
JSON
также поддерживает два дополнительных аргумента:
replacer
— функция или массив, позволяющие изменить стандартное преобразование. Например, еслиreplacer
это массив['nickname'
, то только эти свойства объекта попадут в результирующую строку., 'age' ] space
— строка или число пробелов, которые будут использоваться для форматирования результата. Это позволяет улучшить читаемость и представить результат в более наглядном виде.
Например, отформатируем результат предыдущего примера:
console.log(JSON.stringify(hero, null, 2))// {// "nickname": "BestHealerEver",// "level": 7,// "age": 141,// "race": "Gnome",// "isImmortal": false,// "things": [// "sword",// "helmet",// "belt"// ],// "money": {// "gold": 6387,// "silver": 1264,// "bronze": 931,// "diamonds": 2// }// }
console.log(JSON.stringify(hero, null, 2)) // { // "nickname": "BestHealerEver", // "level": 7, // "age": 141, // "race": "Gnome", // "isImmortal": false, // "things": [ // "sword", // "helmet", // "belt" // ], // "money": { // "gold": 6387, // "silver": 1264, // "bronze": 931, // "diamonds": 2 // } // }
Пример преобразования объекта JavaScript в формат JSON
СкопированоПреобразование из JSON
СкопированоПреобразовать строку с JSON в объект JavaScript можно с помощью метода JSON
. Он принимает JSON-строку в качестве аргумента.
Попробуем преобразовать JSON:
{ "name": "Luke Skywalker", "height": "172", "mass": "77", "hair_color": "blond", "skin_color": "fair", "eye_color": "blue", "birth_year": "19BBY", "gender": "male"}
{ "name": "Luke Skywalker", "height": "172", "mass": "77", "hair_color": "blond", "skin_color": "fair", "eye_color": "blue", "birth_year": "19BBY", "gender": "male" }
С помощью JSON
мы получим стандартный объект, с которым можно взаимодействовать:
const json = '{"name":"Luke Skywalker","height":"172","mass":"77","hair_color":"blond","skin_color":"fair","eye_color":"blue","birth_year":"19BBY","gender":"male"}'const jedi = JSON.parse(json)console.log(jedi.name)// Luke Skywalkerconsole.log(jedi.gender)// maleconsole.log(jedi.birth_year)// 19BBY
const json = '{"name":"Luke Skywalker","height":"172","mass":"77","hair_color":"blond","skin_color":"fair","eye_color":"blue","birth_year":"19BBY","gender":"male"}' const jedi = JSON.parse(json) console.log(jedi.name) // Luke Skywalker console.log(jedi.gender) // male console.log(jedi.birth_year) // 19BBY
В случае, если строка невалидный JSON-код, метод JSON
выбросит ошибку SyntaxError
На практике
Скопированосоветует Скопировано
🛠 JSON очень удобно использовать для получения данных в сети. Например, один из популярных сервисов прогноза погоды, Open Weather, может отдавать данные в JSON через API. Вот JSON с погодой в Лондоне.
🛠 JSON поддерживается большинством языков программирования, поэтому в нем удобно хранить служебную информацию и настройки.
🛠 JSON не поддерживает комментарии, JavaScript-комментарий /
приведёт к ошибке.
🛠 Альтернативные форматы передачи данных — XML и YAML.
🛠 Наиболее известным JSON-файлом является конфигурационный файл менеджера пакетов npm - package
.