Книга: Выразительный JavaScript
JSON
JSON
Функции высшего порядка, которые каким-то образом применяют функцию к элементам массива, широко распространены в JavaScript. Метод forEach
– одна из самых примитивных подобных функций. В качестве методов массивов нам доступно много других вариантов функций. Для знакомства с ними давайте поиграем с ещё одним набором данных.
Несколько лет назад кто-то обследовал много архивов и сделал целую книгу по истории моей фамилии. Я открыл её, надеясь найти там рыцарей, пиратов и алхимиков… Но оказалось, что она заполнена в основном фламандскими фермерами. Для развлечения я извлёк информацию по моим непосредственным предкам и перевёл в формат, пригодный для чтения компьютером.
Файл выглядит примерно так:
[
{"name": "Emma de Milliano", "sex": "f",
"born": 1876, "died": 1956,
"father": "Petrus de Milliano",
"mother": "Sophia van Damme"},
{"name": "Carolus Haverbeke", "sex": "m",
"born": 1832, "died": 1905,
"father": "Carel Haverbeke",
"mother": "Maria van Brussel"},
… и так далее
]
Этот формат называется JSON, что означает JavaScript Object Notation (разметка объектов JavaScript). Он широко используется в хранении данных и сетевых коммуникациях.
JSON похож на JavaScript по способу записи массивов и объектов – с некоторыми ограничениями. Все имена свойств должны быть заключены в двойные кавычки, а также допускаются только простые величины – никаких вызовов функций, переменных, ничего что включало бы вычисления. Также не допускаются комментарии.
JavaScript предоставляет функции JSON.stringify
и JSON.parse
, которые преобразовывают данные из этого формата и в этот формат. Первая принимает значение и возвращает строчку с JSON. Вторая принимает такую строчку и возвращает значение.
var string = JSON.stringify({name: "X", born: 1980});
console.log(string);
// ? {"name":"X","born":1980}
console.log(JSON.parse(string).born);
// ? 1980
Переменная ANCESTRY_FILE
, доступная здесь, содержит JSON файл в виде строки. Давайте её раскодируем и посчитаем количество упомянутых людей.
var ancestry = JSON.parse(ANCESTRY_FILE);
console.log(ancestry.length);
// ? 39
- 11.9. Сериализация массивов и словарей в JSON
- Глава 11. Сетевые функции, JSON, XML и Twitter
- 11.10. Десериализация нотации JSON в массивы и словари
- 6.10.3. Метод toJSON()
- 18.1.3.2. Запросы с данными в формате JSON
- 18.2. Выполнение НТТР-запросов с помощью : JSONP
- 19.6.2.2. jQuery.getJSON()
- JsonResult
- jQuery. getJSON
- Обсуждение