JSON


Начало работы

Введение

JSON - это легкий текстовый открытый стандарт, предназначенный для обмена данными в человекочитаемом виде.

  • JSON расшифровывается как JavaScript Object Notation.
  • JSON легко читать и писать.
  • JSON - это формат обмена данными, не зависящий от языка.
  • Расширение имени файла JSON - .json.
  • Тип интернет-носителя JSON - application/json. {.marker-round}

Примеры

``json { “name”: “Jason”, “age”: 39, “height”: 1.92, “gender”: “M”, “зарплата”: 70000, “женат”: true, “дети”: [ {“name”: “Том”, “возраст”: 9, “gender”: “M”}, { “name”: “Ava”, “age”: 7, “gender”: “F”} ] }



### Типы

| Тип | Описание |
|-----------|-----------------------------------------|
| `Число` | Двойная точность с плавающей точкой |
| `Строка` | Серия символов |
| `Булево` | `истина` или `ложь` |
| `Массив` | Упорядоченная последовательность значений |
| `Value` | Строка, число, булево, null и т.д.|
| `Object` | Неупорядоченная коллекция пар ключ/значение |
| `null` | Null или Empty |




### Строка {.row-span-3}
| | |
|------|----------------------------|
| `\"` | Двойная кавычка |
| `\\\` | Обратная косая черта |
| `\/` | Прямая косая черта |
| `\b` | Backspace |
| `\f` | Форма подачи |
| `\n` | Новая строка |
| `\r` | Возврат каретки |
| `\t` | Табуляция |
| `\u` | После четырех шестнадцатеричных цифр |

#### Примеры
``json
{
  "url": "https://cheatsheets.zip",
  "msg" : "Привет,\n\"CheatSheets.zip\",
  "intro": "Делимся краткими справочниками и шпаргалками для разработчиков."
}

Недопустимая строка

``json { “foo”: ‘bar’ }

Должны быть разделены двойными кавычками



### Число {.row-span-2}

| Тип | Описание |
|------------|----------------------------------------|
| `Integer` | Цифры 1-9, 0 и положительные или отрицательные |
| `Дробь` | Дроби, например 0.3, 3.9 |
| `Exponent` | Экспонента, например, e, e+, e-, E, E+, E |

#### Примеры
``json
{
  "положительный" : 12,
  "отрицательный" : -1,
  "дробь" : 10.25,
  "экспонента" : 1.0E+2,
  "zero" : 0
}

Неверное число

``json { “foo”: 0xFF }

В JSON можно использовать только десятичные литералы



### Объекты

``json
{
  "color": "Purple",
  "id": "210",
  "composition": {
    "R": 70,
    "G": 39,
    "B": 89
  },
  "empty_object": {}
}

Несколько пар ключ/значение, разделенных запятой

Массивы

``json [1, 2, 3, 4, 5]

Начинается с `[` и заканчивается `]`.



### Массив объектов
``json
{
  "children": [
    { "name": "Джимми Смит", "возраст": 15},
    { "name": "Сэмми Соса", "возраст": 12}
  ]
}

Объект массивов

``json { “attributes”: [“a1”, “a2”], “methods”: [“getter”, “setter”], “empty_array”: [] }



### Двумерный массив
``json
{
  "my_sequences": [
    [1, 2, 3],
    [4, 5, 6],
    [7, 8, 9, 0],
    [10, 11]
  ]
}

Объект объектов

``json { “Mark McGwire”: { “hr”: 65, “avg”: 0.278 }, “Сэмми Соса”: { “hr”: 63, “avg”: 0.288 } }


### Вложенные
``json
{
  "Jack": {
    "id": 1,
    "name": "Franc",
    "salary": 25000,
    "hobby": ["a", "b"],
    "location": {
        "страна": "A", "city": "A-A"
    }
  }
}

Доступ к JSON на JavaScript

Access Object

``javascript let myObject = { “name”: “Jason”, “last”: “Doe”, “age”: 39, “gender”: “M”, “salary”: 70000, “женат”: true };

----

| | |
|--------------------|-----------|
| `myObject.name` | "Джейсон" |
| `myObject["name"]` | "Jason" |
| | `myObject.age` | 39 |
| `myObject.other` | undefined |
| `myObject[0]` | undefined |



### Доступ к вложенным {.row-span-2}
``javascript
let myObject = {
  "ref": {
    "name": 0,
    "last": 1,
    "age": 2,
    "gender": 3,
    "зарплата": 4,
    "женат": 5
  },
  "jdoe": [
    "Jason",
    "Doe",
    39,
    "M",
    70000,
    true
  ],
  "jsmith": [
    "Tom",
    "Smith",
    42,
    "F",
    80000,
    true
  ]
};

myObject.ref.age 2
myObject["ref"]["age"] 2
myObject.jdoe [“Джейсон”, “Доу”, 39 …]
myObject.jsmith[3]
myObject[1] undefined

Доступ к массиву объектов

``javascript let myArray = [ { “name”: “Jason”, “last”: “Doe”, “age”: 39, “gender”: “M”, “salary”: 70000, “замужем”: true }, { “name”: “Tom”, “last”: “Smith”, “age”: 42, “gender”: “F”, “salary”: 80000, “замужем”: true }, { “имя”: “Amy”, “last”: “Burnquist”, “age”: 29, “gender”: “F”, “salary”: 60000, “замужем”: false } ];

----

| | |
|---------------------|----------------------------|
| `myArray[0]` | `{"name": "Джейсон", ...`}` |
| `myArray[1].name` | "Том" |
| | `myArray[1][2]` | 42 |
| `myArray[3]` | undefined |
| | `myArray[3].gender` | TypeError: Cannot read...  |




### Массив доступа
``javascript
let myArray = [
  "Jason",
  "Doe",
  39,
  "M",
  70000,
  true
];

myArray[1] “Doe”
myArray[5] true
myArray[6] undefined

Также см.