Skip to content

Commit bc9ed14

Browse files
committed
вычитка статьи
1 parent 5f0f4b7 commit bc9ed14

1 file changed

Lines changed: 23 additions & 23 deletions

File tree

1-js/05-data-types/11-json/article.md

Lines changed: 23 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ let user = {
2121
alert(user); // {name: "John", age: 30}
2222
```
2323

24-
...Но в процессе разработки добавляются новые свойства, старые свойства переименовываются и удаляются. Обновление такого `toString` каждый раз может стать проблемой. Мы могли бы попытаться перебрать свойства в нем, но что, если объект является сложным и имеет вложенные объекты в свойствах? Мы должны были бы также осуществить их преобразование. И, если мы отправляем объект по сети, нам также нужно предоставить код для «чтения» нашего объекта на принимающей стороне.
24+
...Но в процессе разработки добавляются новые свойства, старые свойства переименовываются и удаляются. Обновление такого `toString` каждый раз может стать проблемой. Мы могли бы попытаться перебрать свойства в нем, но что, если объект является сложным и имеет вложенные объекты в свойствах? Мы должны были бы также осуществить их преобразование. И, если мы отправляем объект по сети, нам также нужно предоставить код для "чтения" нашего объекта на принимающей стороне.
2525

2626
К счастью, нет необходимости писать код для обработки всего этого. У задачи есть простое решение.
2727

@@ -66,17 +66,17 @@ alert(json);
6666

6767
Метод `JSON.stringify(student)` берет объект и преобразует его в строку.
6868

69-
Полученная строка `json` называется *JSON-кодированным* или *сериализованным*, *строковым* или *структурированным* объектом. Мы готовы отправить его по сети или поместить в обычное хранилище данных.
69+
Полученная строка `json` называется *JSON-форматированным*, *сериализованным*, *строчным* или же *структурированным* объектом. Мы можем отправить его по сети или поместить в обычное хранилище данных.
7070

7171

72-
Обратите внимание, что JSON-кодированный объект имеет несколько важных отличий от объектного литерала:
72+
Обратите внимание, что объект в формате JSON имеет несколько важных отличий от объектного литерала:
7373

7474
- Строки используют двойные кавычки. Никаких одинарных кавычек или обратных кавычек в JSON. Так `'John'` становится `"John"`.
7575
- Имена свойств объекта также заключаются в двойные кавычки. Это обязательно. Так `age:30` становится `"age":30`.
7676

7777
`JSON.stringify` может быть применен и к примитивам.
7878

79-
Внутренне поддерживаются типы JSON:
79+
Собственно поддерживаемые типы JSON:
8080

8181
- Объекты `{ ... }`
8282
- Массивы `[ ... ]`
@@ -100,13 +100,13 @@ alert( JSON.stringify(true) ); // true
100100
alert( JSON.stringify([1, 2, 3]) ); // [1,2,3]
101101
```
102102

103-
JSON является спецификацией только для данных на нескольких язках, поэтому некоторые специфичные для JavaScript свойства объекта в `JSON.stringify` пропускаются.
103+
JSON является кросс-языковой спецификацией для данных, поэтому `JSON.stringify` пропускает некоторые специфические свойства объектов JavaScript.
104104

105105
А именно:
106106

107107
- Свойства-функции (методы).
108108
- Символические свойства.
109-
- Свойства, которые хранят `undefined`.
109+
- Свойства, содержащие `undefined`.
110110

111111
```js run
112112
let user = {
@@ -120,7 +120,7 @@ let user = {
120120
alert( JSON.stringify(user) ); // {} (пустой объект)
121121
```
122122

123-
Обычно это нормально. Если это не то, что мы хотим, то скоро мы увидим, как настроить процесс.
123+
Обычно это нормально. Если это не то, что мы хотим, то скоро мы увидим, как можно адаптировать этот процесс.
124124

125125
Самое замечательное, что вложенные объекты поддерживаются и конвертируются автоматически.
126126

@@ -213,7 +213,7 @@ alert( JSON.stringify(meetup, *!*['title', 'participants']*/!*) );
213213
// {"title":"Conference","participants":[{},{}]}
214214
```
215215

216-
Здесь мы, наверное, слишком строги. Список свойств применяется ко всей структуре объекта. Так что свойство `participants` пустое, потому что `name` нет в списке.
216+
Здесь мы, наверно, слишком строги. Список свойств применяется ко всей структуре объекта. Так что свойство `participants` пустое, потому что `name` нет в списке.
217217

218218
Давайте включим все свойства, кроме `room.occupiedBy`, из-за которого появляется цикличная ссылка:
219219

@@ -242,11 +242,11 @@ alert( JSON.stringify(meetup, *!*['title', 'participants', 'place', 'name', 'num
242242

243243
Теперь все, кроме `occupiedBy`, сериализовано. Но список свойств довольно длинный.
244244

245-
К счастью,в качестве `replacer` мы можем использовать функцию, а не массив.
245+
К счастью, в качестве `replacer` мы можем использовать функцию, а не массив.
246246

247-
Функция будет вызываться для каждой пары `(key, value)` и должна возвращать «замененное» значение, которое будет использоваться вместо исходного.
247+
Функция будет вызываться для каждой пары `(key, value)` и должна возвращать "замененное" значение, которое будет использоваться вместо исходного.
248248

249-
В нашем случае мы можем вернуть `value` «как есть» для всего, кроме `occupiedBy`. Чтобы игнорировать `occupiedBy`, код ниже возвращает `undefined`:
249+
В нашем случае мы можем вернуть `value` "как есть" для всего, кроме `occupiedBy`. Чтобы игнорировать `occupiedBy`, код ниже возвращает `undefined`:
250250

251251
```js run
252252
let room = {
@@ -281,16 +281,16 @@ number: 23
281281

282282
Обратите внимание, что функция `replacer` получает каждую пару ключ/значение, включая вложенные объекты и элементы массива. И она применяется рекурсивно. Значение `this` внутри `replacer` - это объект, который содержит текущее свойство.
283283

284-
Первый вызов - особенный. Ему передается специальный "объект-обертка": `{"": meetup}`. Другими словами, первая `(key, value)` пара имеет пустой ключ, а значением является целевой объект в целом. Вот почему первая строка будет `":[object Object]"` в примере выше.
284+
Первый вызов - особенный. Ему передается специальный "объект-обертка": `{"": meetup}`. Другими словами, первая `(key, value)` пара имеет пустой ключ, а значением является целевой объект в целом. Вот почему первая строка из примера выше будет `":[object Object]"`.
285285

286286
Идея состоит в том, чтобы переложить как можно больше действий на `replacer` - у него есть возможность проанализировать и заменить/пропустить весь объект целиком, если это необходимо.
287287

288288

289289
## Форматирование: spacer
290290

291-
Третий аргумент `JSON.stringify(value, replacer, spaces)` - это количество пробелов, используемых для удобного форматирования.
291+
Третий аргумент в `JSON.stringify(value, replacer, spaces)` - это количество отступов, используемых для удобного форматирования.
292292

293-
Ранее все строковые объекты не имели отступов и лишних пробелов. Это нормально, если мы хотим отправить объект по сети. Аргумент `spacer` используется исключительно для вывода в удобочитаемом виде.
293+
Ранее все строчные объекты не имели отступов и лишних пробелов. Это нормально, если мы хотим отправить объект по сети. Аргумент `spacer` используется исключительно для вывода в удобочитаемом виде.
294294

295295
Ниже `spacer = 2` указывает JavaScript отображать вложенные объекты в несколько строк с отступом в 2 пробела внутри объекта:
296296

@@ -328,9 +328,9 @@ alert(JSON.stringify(user, null, 2));
328328
*/
329329
```
330330

331-
Параметр `spaces` используется исключительно для логирования и красивого вывода.
331+
Параметр `spaces` применяется для логирования и красивого вывода.
332332

333-
## Пользовательский «toJSON»
333+
## Пользовательский "toJSON"
334334

335335
Как и `toString` для преобразования строк, объект может предоставлять метод `toJSON` для преобразования в JSON. `JSON.stringify` автоматически вызывает его, если он есть.
336336

@@ -406,7 +406,7 @@ let value = JSON.parse(str[, reviver]);
406406
```
407407

408408
str
409-
: JSON-строка для разбора.
409+
: преобразуемая JSON-строка.
410410

411411
reviver
412412
: Необязательная функция с параметрами (ключ, значение), которая будет вызываться для каждой пары `(key, value)` и может преобразовывать значение.
@@ -448,13 +448,13 @@ let json = `{
448448

449449
Кроме того, JSON не поддерживает комментарии. Добавление комментария в JSON делает его недействительным.
450450

451-
Существует еще один формат [JSON5](http://json5.org/), который позволяет вводить ключи без кавычек, комментарии и т.д. Но это самостоятельная библиотека, не в спецификации языка.
451+
Существует еще один формат [JSON5](http://json5.org/), который поддерживает ключи без кавычек, комментарии и т.д. Но это самостоятельная библиотека, а не спецификация языка.
452452

453453
Обычный JSON настолько строг не потому, что его разработчики ленивы, а потому, что позволяет легко, надежно и очень быстро реализовывать алгоритм парсинга.
454454

455455
## Использование reviver
456456

457-
Представьте себе, мы получили строковый объект `meetup` с сервера.
457+
Представьте себе, мы получили объект `meetup` с сервера в виде строчки данных.
458458

459459
Вот такой:
460460

@@ -477,11 +477,11 @@ alert( meetup.date.getDate() ); // Error!
477477
*/!*
478478
```
479479

480-
Опачки! Вышла ошибка!
480+
Оп, ошибка!
481481

482482
Значением `meetup.date` является строка, а не `Date` объект. Как мог `JSON.parse` знать, что он должен преобразовать эту строку в `Date`?
483483

484-
Давайте перейдем к функции восстановления `JSON.parse`, которая возвращает все значения «как есть», но `date` станет `Date`:
484+
Давайте перейдем к функции восстановления `JSON.parse`, которая возвращает все значения "как есть", но `date` станет `Date`:
485485

486486
```js run
487487
let str = '{"title":"Conference","date":"2017-11-30T12:00:00.000Z"}';
@@ -512,7 +512,7 @@ schedule = JSON.parse(schedule, function(key, value) {
512512
});
513513

514514
*!*
515-
alert( schedule.meetups[1].date.getDate() ); // 18 - работает!
515+
alert( schedule.meetups[1].date.getDate() ); // 18 - отлично!
516516
*/!*
517517
```
518518

@@ -524,4 +524,4 @@ alert( schedule.meetups[1].date.getDate() ); // 18 - работает!
524524
- JSON поддерживает простые объекты, массивы, строки, числа, логические значения и `null`.
525525
- JavaScript предоставляет методы [JSON.stringify](mdn:js/JSON/stringify) для сериализации в JSON и [JSON.parse](mdn:js/JSON/parse) для чтения из JSON.
526526
- Оба метода поддерживают функции преобразования для интеллектуального чтения/записи.
527-
- Если объект имеет `toJSON`, то он вызывается `JSON.stringify`.
527+
- Если объект имеет метод `toJSON`, то он вызывается через `JSON.stringify`.

0 commit comments

Comments
 (0)