JSON (JavaScript Object Notation) - это легкий формат, который используется для обмена данными. Он основан на подмножестве языка JavaScript (способ создания объектов в JavaScript). Как указано в MDN , некоторые JavaScript не являются JSON, а некоторые JSON не являются JavaScript.
Примером того, где это используется, являются ответы веб-сервисов. В «старые» времена веб-службы использовали XML в качестве основного формата данных для передачи обратных данных, но с тех пор, как появился JSON ( формат JSON указан в RFC 4627 Дугласом Крокфордом ), он был предпочтительным форматом, поскольку он гораздо более легкий
Вы можете найти гораздо больше информации на официальном сайте JSON .
JSON построен на двух структурах:
- Коллекция пар имя / значение. На разных языках это реализовано как объект, запись, структура, словарь, хеш-таблица, список ключей или ассоциативный массив.
- Упорядоченный список значений. В большинстве языков это реализовано как массив, вектор, список или последовательность.
Структура JSON
Вот пример данных JSON:
{
"firstName": "John",
"lastName": "Smith",
"address": {
"streetAddress": "21 2nd Street",
"city": "New York",
"state": "NY",
"postalCode": 10021
},
"phoneNumbers": [
"212 555-1234",
"646 555-4567"
]
}
JSON в JavaScript
JSON (в Javascript) это строка!
Люди часто предполагают, что все объекты Javascript - это JSON, а JSON - это объект Javascript. Это неверно
В Javascript var x = {x:y}
это не JSON , это объект Javascript . Два не одно и то же. Эквивалент JSON (представленный на языке Javascript) будет var x = '{"x":"y"}'
. x
это объект типа string, а не объект сам по себе. Чтобы превратить это в полноценный объект Javascript, вы должны сначала разобрать его var x = JSON.parse('{"x":"y"}');
,x
теперь объект , но это не JSON больше.
Смотрите Javascript объект против JSON
При работе с JSON и JavaScript может возникнуть соблазн использовать eval
функцию для оценки результата, возвращаемого в обратном вызове, но это не рекомендуется, поскольку в JSON допустимы два символа (U + 2028 и U + 2029), но не в JavaScript (подробнее об этом здесь ).
Поэтому всегда нужно пытаться использовать скрипт Крокфорда, который проверяет допустимый JSON, прежде чем оценивать его. Ссылка на объяснение сценария находится здесь, а здесь - прямая ссылка на файл js. В настоящее время каждый крупный браузер имеет собственную реализацию для этого.
Пример использования синтаксического анализатора JSON (с json из приведенного выше фрагмента кода):
//The callback function that will be executed once data is received from the server
var callback = function (result) {
var johnny = JSON.parse(result);
//Now, the variable 'johnny' is an object that contains all of the properties
//from the above code snippet (the json example)
alert(johnny.firstName + ' ' + johnny.lastName); //Will alert 'John Smith'
};
Парсер JSON также предлагает еще один очень полезный метод stringify
. Этот метод принимает объект JavaScript в качестве параметра и возвращает строку в формате JSON. Это полезно, когда вы хотите отправить данные обратно на сервер:
var anObject = {name: "Andreas", surname : "Grech", age : 20};
var jsonFormat = JSON.stringify(anObject);
//The above method will output this: {"name":"Andreas","surname":"Grech","age":20}
Два вышеупомянутых метода ( parse
и stringify
) также принимают второй параметр, который является функцией, которая будет вызываться для каждой клавиши и значения на каждом уровне конечного результата, и каждое значение будет заменено результатом введенной вами функции. (Подробнее об этом здесь )
Кстати, для всех вас, кто думает, что JSON только для JavaScript, прочитайте этот пост, который объясняет и подтверждает иное.
Ссылки