Что такое JSON, и работа с ним в JavaScript
JSON (JavaScript Object Notation) - это легкий формат для обмена данными. Хотя он создан на основе JavaScript - он может использоваться со многими языками программирования. Однако в этой статье мы сосредоточимся на использовании JSON в JavaScript.
Где мы будем использовать JSON?
Некоторые скрипты включают в себя:
- Хранение данных
- Конфигурация и проверка данных
- Генерация структур данных из пользовательского ввода
- Передача данных с клиента на сервер, с сервера на клиент и между серверами
Синтаксис и структура
Обычно вы встречаете JSON, сохраненный в файле .json. Файлы JSON состоят из серии пар ключ / значение.
{"ключ": "значение"}
Обратите внимание, что ключ и значение заключены в двойные кавычки. Если бы это был литерал объекта JavaScript - нам не нужны были бы кавычки вокруг ключа, только строковое значение. Чтобы проанализировать это как действительный JSON, нам нужно помнить, чтобы наши ключи оставались в кавычках, а также следовали за конкретными типами данных, которые следуют ..
Типы данных
Следующие типы данных могут использоваться с JSON:
- string (в двойных кавычках)
- числа
- объекты
- массивы
- Booleans (true или false)
- null
Случаи применения
Давайте рассмотрим пример JSON-файла contacts.json:
{
"имя": "Тимоти",
"возраст": 35,
"адрес":{
"Улица": "1 Main St",
"город": "Монреаль"
},
"интересы": ["готовка", "велосипед"]
}
Здесь у нас есть имя, заданное в виде строки, возраст как число, адрес - внедренный объект, а интересы - массив строк.
Когда вы работаете с JSON, вы можете также встретить JSON как объект или строку в контексте программы. Если ваш JSON-объект находится в файле .js или .html - он, вероятно, будет в переменной. Тогда наш пример будет выглядеть так:
let contacts = {
имя: "Тимоти",
возраст: 35,
адрес:{
улица: "1 Main St",
город: "Монреаль"
},
интересы: ["кулинария", "велосипед"]
}
Или, если он хранится в виде строки, он будет однострочным:
let contacts = {"name": "Timothy", "age": 35, "address": {"street": "1 Main St", "city": "Montreal"}, "интересов": ["кулинария" , "велосипед"]}
Конечно, запись в формате JSON на нескольких строках делает его более читабельным, особенно при работе с большим количеством данных. JSON игнорирует пробелы между его элементами, поэтому вы можете свободно распределять пары ключ-значение, чтобы сделать данные проще для глаз!
Работа с JSON в JavaScript
Давайте разберем наш собственный пример! Откройте ваш текстовый редактор и создайте такой HTML-файл:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>JSON Demo</title>
</head>
<body>
<script>
let contacts = {
name: "Timothy",
age: 35,
address: {
street: "1 Main St",
city: "Montreal"
},
interests: ["cooking", "biking"]
}
</script>
</body>
</html>
Мы можем получить доступ к нашим данным JSON через консоль, используя точечные обозначения, например:
contacts.name //Timothy contacts.age // 35 contacts.address.street // 1 Main St contacts.address.city // Montreal contacts.interests [0] // cooking contacts.interests [1] // bikingКогда мы хотим передать или сохранить наши данные, очень полезно иметь возможность преобразовать наш объект JSON в строку с помощью JSON.stringify(). И аналогично преобразуйте строку обратно в объект, используя JSON.parse ().
JSON.stringify()
Функция JSON.stringify() преобразует объект JavaScript в строку JSON. Строки имеют малый вес и поэтому очень полезны при передаче данных с клиента на сервер.
Давайте вернем наш предыдущий пример и назначим метод JSON.stringify() переменной s. Мы передаем объект наших контактов в функцию.
let contacts = {
name: "Timothy",
age: 35,
address: {
street: "1 Main St",
city: "Montreal"
},
interests: ["cooking", "biking"]
}
let s = JSON.stringify(contacts);
Если мы теперь посмотрим на s в консоли, то увидим доступный нам JSON в виде строки, а не объекта.
'{"name":"Timothy","age":35,"address":{"street":"1 Main St","city":"Montreal"},"interests":["cooking","biking"]}'
Функция JSON.stringify () позволяет нам преобразовывать объекты в строки. Чтобы сделать обратное, мы используем функцию JSON.parse().
JSON.parse()
Чтобы преобразовать строку обратно в функцию, мы используем встроенную функцию JSON.parse (), чтобы декодировать строку.
let contacts = JSON.parse(s);Теперь мы можем получить доступ к данным как обычный объект JavaScript.
contacts.name // TimothyЦикл по массиву
При работе с JSON часто необходимо проходить по массивам объектов. Давайте создадим быстрый массив:
let users = [
{
name: "Timothy",
age: 35
},
{
name: "Georgette",
age: 29
},
{
name: "Craig",
age: 54
}
];
И давайте создадим цикл for, чтобы перебрать наши данные:
for (var i = 0; i < users.length; i++) {
console.log(users[i].name);
}
------------
вывод:
Timothy
Georgette
Craig
------------
Теперь давайте вернемся к нашему HTML-файлу:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>JSON Demo</title>
</head>
<body>
<ul id="users"></ul>
<script>
let contacts = {
name: "Timothy",
age: 35,
address: {
street: "1 Main St",
city: "Montreal"
},
interests: ["cooking", "biking"]
}
// let s = JSON.stringify(contacts);
// let s = JSON.parse(contacts);
let users = [
{
name: "Timothy",
age: 35
},
{
name: "Georgette",
age: 29
},
{
name: "Craig",
age: 54
}
];
let output = '';
for (var i = 0; i < users.length; i++) {
// console.log(users[i].name);
output += '<li>'+users[i].name+'</li>';
}
document.getElementById('users').innerHTML = output;
</script>
</body>
</html>
Обратите внимание на изменения, выделенные жирным шрифтом. Я добавил элемент ul для хранения нашего вывода. И выходная переменная в нашем скрипте, которая хранит наши данные из цикла через getElementById.
Доступ к JSON из URL
В большинстве случаев нам потребуется доступ к JSON с URL-адреса. Для этого требуется дополнительный шаг - мы будем использовать AJAX, чтобы сделать GET-запрос для файла. Для нашей демонстрации давайте возьмем приведенную выше строку JSON и поместим ее в новый файл с именем users.json. Это должно выглядеть так:
[
{
"name": "Timothy",
"age": 35
},
{
"name": "Georgette",
"age": 29
},
{
"name": "Craig",
"age": 54
}
]
Примечание: так как это файл JSON (не объект), вы должны заключить в кавычки ваши ключи!
Теперь мы сделаем XMLHttpRequest().
let request = new XMLHttpRequest ();Мы откроем файл users.json с помощью запроса GET (URL).
request.open ('GET', 'users.json', true);
Конечно, если ваш файл JSON хранится снаружи, вы должны заменить «users.json» на полный URL-адрес. Теперь мы анализируем наши данные JSON в функции onload. А затем переберите данные, отображая в нашем элементе ul.
request.onload = function () {
// Преобразование данных JSON в объект
let users = JSON.parse (this.response);
let output = '';
для (var i = 0; i <users.length; i ++) {
output + = '<li>' + users [i] .name + 'is' + users [i] .age + 'years old.'; </ Li> '
}
document.getElementById ('users'). innerHTML = output;
}
Тогда, наконец, мы отправляем запрос!
request.send ();Вот последний код.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>JSON Demo</title>
</head>
<body>
<ul id="users"></ul>
<script>
let request = new XMLHttpRequest();
request.open('GET', 'users.json', true);
request.onload = function () {
// Convert JSON data to an object
let users = JSON.parse(this.response);
let output = '';
for (var i = 0; i < users.length; i++) {
output += '<li>' + users[i].name + ' is ' + users[i].age + ' years old.'; '</li>'
}
document.getElementById('users').innerHTML = output;
}
request.send();
</script>
</body>
</html>
Мы почти закончили!
Но если вы откроете файл HTML сейчас, вы получите ошибку в консоли. Поскольку мы вызываем users.json из файловой системы, а не из реального домена (это протокол безопасности браузера). Итак, чтобы проверить это локально, нам нужно запустить его на локальном сервере.
Если у вас установлен xampp, загрузите его в свой webroot. Однако более простым решением было бы установить liveserver через npm. Убедитесь, что у вас установлен NodeJS, и запустите npm install -g live-server из каталога, где хранится ваш HTML-файл.
После завершения установки модуля вы просто запускаете live-сервер из того же каталога, и он открывает файл HTML на локальном сервере. И наши данные будут распечатаны как указано!
Timothy is 35 years old. Georgette is 29 years old. Craig is 54 years old.Использование Fetch
Fetch API - это новая встроенная функция JavaScript, которая значительно упрощает работу с запросами и ответами. Мы можем использовать Fetch с нашими данными следующим образом:
fetch('./users.json').then(response => {
return response.json();
}).then(data => {
// Работаем с данными JSON здесь ..
console.log(data);
}).catch(err => {
// Что делать при сбое запроса
console.log('Запрос не выполнен!');
});
Использование jQuery
Если вы используете в своем проекте jQuery, вы можете получить данные с помощью функции getJSON ().
$.getJSON('users.json', function (data) {
// Работаем с данными JSON здесь ..
console.log(data[0].name);
});
});
Не забудьте подключить jQuery перед этой функцией, если вы ее тестируете!
Заключение
Я надеюсь, что эта статья помогла вам лучше понять JSON, а также увидеть его в действии с AJAX. JSON широко применяется в отрасли и является фундаментальным навыком для всех серьезных разработчиков.
Если вам требуется помощь в программировании, то я вам её окажу за небольшую плату. Пишите, все мои контакты тут.
Автор этого материала - я - Пахолков Юрий. Я оказываю услуги по написанию программ на языках Java, C++, C# (а также консультирую по ним) и созданию сайтов. Работаю с сайтами на CMS OpenCart, WordPress, ModX и самописными. Кроме этого, работаю напрямую с JavaScript, PHP, CSS, HTML - то есть могу доработать ваш сайт или помочь с веб-программированием. Пишите сюда.
Программы на заказ
Отзывы
Контакты