Что такое JSON и зачем мне его использовать? - PullRequest
513 голосов
/ 20 декабря 2008

Я посмотрел википедию, гуглил и прочитал официальную документацию, но до сих пор не дошел до того, что действительно понимаю, что такое JSON и почему я его использую.

Я некоторое время создавал приложения, используя PHP, MySQL и Javascript / HTML, и если JSON может что-то сделать, чтобы облегчить мою жизнь, улучшить мой код или улучшить пользовательский интерфейс, я бы хотел узнать об этом. , Может ли кто-нибудь дать мне краткое объяснение?

Ответы [ 16 ]

624 голосов
/ 20 декабря 2008

JSON (нотация объектов JavaScript) - это облегченный формат, используемый для обмена данными. Он основан на подмножестве языка JavaScript (способ создания объектов в JavaScript). Как указано в MDN , некоторые JavaScript не являются JSON, а некоторые JSON не являются JavaScript.

Примером того, где это используется, являются ответы веб-сервисов. В «старые» времена веб-сервисы использовали XML в качестве основного формата данных для передачи обратных данных, но с момента появления JSON ( формат JSON указан в RFC 4627 Дугласом Крокфордом ) , это был предпочтительный формат, потому что он намного более легкий

Вы можете найти гораздо больше информации на официальном сайте JSON .

JSON построен на двух структурах:

  • Коллекция пар имя / значение. На разных языках это реализовано как объект, запись, структура, словарь, хеш-таблица, список ключей или ассоциативный массив.
  • Упорядоченный список значений. В большинстве языков это реализовано как массив, вектор, список или последовательность.

Структура JSON



JSON Object diagram

JSON Array diagram

JSON Value diagram

JSON String diagram

JSON Number diagram

Вот пример данных 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 для оценки результата, возвращаемого в обратном вызове, но это не рекомендуется, поскольку допустимы два символа (U + 2028 и U + 2029) в JSON, но не в 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, прочитайте этот пост , который объясняет и подтверждает иное.


Ссылки

50 голосов
/ 15 января 2017

Все вышеперечисленные ответы сосредоточены на специфике. Поэтому я попытаюсь объяснить концепцию , чтобы вы могли понять вышесказанное.

Что такое JSON? - Как я объяснил это моей жене ТМ

Я: «Это в основном способ общения с кем-то в письменной форме ... но с правилами.

Жена: да ....?

ME: Давайте возьмем в качестве примера английский: у нас есть правила - точки, запятые, скобки, дефисы, апострофы и т. Д., И все они означают разные вещи. По сути, мы все согласились с тем, что означает полная остановка (т.е. мы должны сделать паузу, когда читаем одну).

Жена: Так вы говорите, что JSON - это способ написать кому-то английский, но у него есть правила, с которыми согласны обе стороны?

Я: Точно! За исключением того, что эти правила очень специфичны. В прозаическом английском правила довольно просты: как в случае с боем в клетке: вы можете делать все, что угодно, кроме нескольких базовых правил (например, выдавливания глаз). Например, если бы я хотел рассказать IRS о нашей семье, я мог бы сделать это на нескольких разных языках, используя прозаический английский. Обратите внимание на различия в каждом направлении:

Я:

• Пример 1. В нашей семье 4 человека: ты, я и 2 ребенка.

• Пример 2. Наша семья: ты, я, малыш1 и малыш2.

• Пример 3: Семья: [ты, я, малыш1, малыш2]

• Пример 4: в нашей семье 4 человека: мама, папа, малыш1 и малыш2.

Жена: Хорошо, я понял. Вы можете сказать то же самое по-разному на английском языке. Вы можете добавить несколько слов здесь и там, несколько запятых здесь и там, и все все равно поймут.

Я: Точно. За исключением JSON, правила очень строгие. Вы можете общаться только определенным образом. И вы должны следовать этим правилам, чтобы кто-то еще мог это понять: скобки, запятые в определенных местах.

Жена: Почему они просто не используют простой английский вместо этого?

Я: Они будут, но помните, что мы имеем дело с компьютерами. Компьютер глуп и не сможет понять предложения. Поэтому мы должны быть действительно конкретными, когда компьютеры задействованы, иначе они запутаются. Кроме того, JSON - это довольно эффективный способ общения, поэтому большинство ненужных вещей вырезано, что довольно красиво. Если вы хотите общаться с нашей семьей на компьютере, вы можете сделать это следующим образом:

{
                "Family" :  ["Me", "Wife", "Kid1", "Kid2"] 
}

…… и это в основном JSON. Но помните, вы ДОЛЖНЫ соблюдать правила грамматики JSON. Если вы нарушите эти правила, компьютер просто не поймет (то есть проанализирует), что вы пишете.

Жена: Так как мне писать в Json?

Я: Прочитайте приведенные выше ответы для уточнения. Короче говоря, вы вынуждены обмениваться информацией с помощью пар ключ-значение и массивов.

Резюме

JSON - это в основном способ передачи данных кому-то с очень и очень конкретными правилами.

48 голосов
/ 20 декабря 2008

Вкратце - JSON - это способ сериализации таким образом, что он становится кодом JavaScript. При выполнении (с помощью eval или иным образом) этот код создает и возвращает объект JavaScript, который содержит сериализованные вами данные. Это доступно, потому что JavaScript допускает следующий синтаксис:

var MyArray = [ 1, 2, 3, 4]; // MyArray is now an array with 4 elements
var MyObject = {
    'StringProperty' : 'Value',
    'IntProperty' : 12,
    'ArrayProperty' : [ 1, 2, 3],
    'ObjectProperty' : { 'SubObjectProperty': 'SomeValue' }
}; // MyObject is now an object with property values set.

Вы можете использовать это для нескольких целей. С одной стороны, это удобный способ передачи данных из серверной части в код JavaScript. Таким образом, это часто используется в AJAX.

Вы также можете использовать его в качестве автономного механизма сериализации, который проще и занимает меньше места, чем XML. Существует множество библиотек, позволяющих сериализовать и десериализовывать объекты в JSON для различных языков программирования.

31 голосов
/ 21 декабря 2008

Короче говоря, это сценарий для передачи данных о. В некотором смысле альтернатива XML, изначально поддерживающая базовые типы данных, массивы и ассоциативные массивы (пары имя-значение, называемые объектами, потому что именно это они представляют).

Синтаксис используется в JavaScript, а сам JSON означает «нотация объектов JavaScript». Однако он стал переносимым и используется и на других языках.

Полезная ссылка для деталей здесь:

http://secretgeek.net/json_3mins.asp

18 голосов
/ 19 января 2012

Формат JSON часто используется для сериализации и передачи структурированных данных по сетевому соединению. Он используется в основном для передачи данных между сервером и веб-приложением, служа альтернативой XML.

16 голосов
/ 20 декабря 2008

JSON - это нотация объектов JavaScript. Это гораздо более компактный способ передачи наборов данных через сетевые соединения по сравнению с XML. Я предлагаю использовать JSON в любых AJAX-подобных приложениях, где XML в противном случае был бы «рекомендуемым» вариантом. Детальность XML добавит времени загрузки и увеличит потребление полосы пропускания ($$$). Вы можете достичь того же эффекта с помощью JSON, и его разметка почти исключительно предназначена для самих данных, а не для базовой структуры.

11 голосов
/ 20 декабря 2008

общий краткий ответ: если вы используете AJAX для выполнения запросов данных, вы можете легко отправлять и возвращать объекты в виде строк JSON. Доступные расширения Javascript поддерживают вызовы toJSON () для всех типов javascript для отправки данных на сервер в запросе AJAX. Ответы AJAX могут возвращать объекты в виде строк JSON, которые могут быть преобразованы в объекты Javascript простым вызовом eval, например, если функция AJAX someAjaxFunctionCallReturningJson вернула

"{ \"FirstName\" : \"Fred\", \"LastName\" : \"Flintstone\" }"

Вы можете написать в Javascript

var obj = eval("(" + someAjaxFunctionCallReturningJson().value + ")");
alert(obj.FirstName);
alert(obj.LastName);

JSON также можно использовать для полезных нагрузок веб-служб и др., Но это действительно удобно для результатов AJAX.

  • Обновление (десять лет спустя): не делайте этого, используйте JSON.parse
8 голосов
/ 19 мая 2015

Что такое JSON?

JavaScript Object Notation (JSON) - это легкий формат обмена данными, основанный на объектных литералах JavaScript.

Значения JSON могут состоять из:

объекты (коллекции пар имя-значение) массивы (упорядоченные списки значений) строки (в двойных кавычках) чисел true, false или null

JSON не зависит от языка.

JSON с PHP?

После PHP версии 5.2.0 расширение JSON декодирует и кодирует функциональные возможности по умолчанию.

Json_encode - возвращает JSON-представление значений Json_decode - декодирует строку JSON Json_last_error - возвращает последнюю произошедшую ошибку.

Синтаксис и правила JSON?

Синтаксис JSON получен из синтаксиса нотации объектов JavaScript:

Данные в парах имя / значение Данные разделяются запятыми Фигурные скобки удерживают предметы Квадратные скобки удерживают массивы

8 голосов
/ 01 января 2009

Мне нравится JSON в основном потому, что это так кратко . Для веб-контента, который можно распаковать, это не обязательно имеет большое значение (следовательно, почему x html так популярен). Но бывают случаи, когда это может быть полезно.

Например, для одного проекта я передавал информацию, которую нужно было сериализовать и передавать через XMPP . Поскольку большинство серверов ограничивают объем данных, которые вы можете передавать в одном сообщении, я нашел полезным использовать JSON вместо очевидной альтернативы, XML.

В качестве дополнительного бонуса, если вы знакомы с Python или Javascript, вы уже достаточно хорошо знаете JSON и можете интерпретировать его без особой подготовки.

4 голосов
/ 22 октября 2014

Разница между JSON и обычным синтаксисом будет следующая (в Javascript)

Обычные

 function Employee(name, Id, Phone, email){

      this.name = name;
      this.Id = Id;
      this.Phone = Phone;
      this.email = email;
  }

  //access or call it as 

var Emp = new Employee("mike","123","9373849784","mike.Anderson@office.com");

С JSON

если мы используем JSON, мы можем определить по-другому как

  function Employee(args){

   this.name = args.name;
   this.Id = args.Id;
   this.Phone = args.Phone;
   this.email = args.email;
}

//now access this as...

var Emp = new Employee({'name':'Mike', 'Id':'123', 'Phone':'23792747', 'email':'mike.adnersone@office.com'});

Важная вещь, которую мы должны помнить, заключается в том, что, если нам нужно построить класс "Employee" или модальный режим из 100 элементов без метода JSON, мы должны проанализировать все при создании класса. Но с помощью JSON мы можем определить встроенные объекты только тогда, когда определен новый объект для класса.

поэтому эта строка ниже - способ работы с JSON (простой способ определения вещей)

 var Emp = new Employee({'name':'Mike', 'Id':'123', 'Phone':'23792747', 'email':'mike.adnersone@office.com'});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...