Что такое JSON и зачем мне его использовать?

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

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

521
задан 19.05.2020, 14:53

7 ответов

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

примером того, где это используется, являются ответы веб-сервисов. В 'старые' дни веб-сервисы использовали XML в качестве своего формата первичных данных для передачи назад данных, но так как JSON появился (, формат JSON определяется в [1 113] RFC 4627 Douglas Crockford ), это был предпочтительный формат, потому что это - намного больше легкий вес

, можно найти намного больше информации о чиновнике веб-сайт 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 объект строки типа не объект в своем собственном праве. Для превращения это в полностью оперенный JavaScript возражает, что необходимо сначала проанализировать его, var x = JSON.parse('{"x":"y"}');, x теперь объект, но это больше не JSON.

Видят объект JavaScript По сравнению с <часом> JSON

При работе с JSON и JavaScript, можно испытать желание использовать эти eval функция для оценки результата, возвращенного в обратном вызове, но это не предлагается, так как существует два символа (U+2028 & U+2029) допустимый в JSON, но не в JavaScript (читает больше из этого здесь ).

Поэтому нужно всегда пытаться использовать сценарий Crockford, который проверяет на допустимый 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. Это полезно для того, когда Вы хотите к [1 149], передают данные обратно серверу:

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) также берут второй параметр, который является функцией, которая будет вызвана для каждого ключа и значения на каждом уровне конечного результата, и каждое значение будет заменено результатом Вашей введенной функции. (Больше на этом здесь )

Btw, для всех Вас там, кто думает, JSON только для JavaScript, проверьте это сообщение , который объясняет и подтверждает иначе.

<час>

Ссылки

632
ответ дан 19.05.2020, 14:55
  • 1
    Независимо от пути информация сериализируется, you' ре, собирающееся иметь синтаксический анализатор, правильно? Поэтому, кто заботится о том, что форматирует Вас использование для передачи данных, если его детали реализации будут абстрактными далеко. – Tom Lehman 19.05.2020, 14:56
  • 2
    Хорошо на самом деле, если you' данные передачи ре туда и сюда клиент и сервер, я думаю it' s довольно важный, чтобы остерегаться Ваших размеров ответа. – Andreas Grech 19.05.2020, 14:56
  • 3
    Для педантичного существует несколько символов, которые JSON обрабатывает по-другому, чем JavaScript, препятствуя тому, чтобы он был строгим подмножеством: timelessrepo.com/json-isnt-a-javascript-subset – Jeremy 19.05.2020, 14:57
  • 4
    Когда Вы говорите, что это - morwe легкий вес, чем XML, Вы обращаетесь к размеру файла, или у легкого веса есть пространственное значение в кодировании? – whatahitson 19.05.2020, 14:57

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

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

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

8
ответ дан 19.05.2020, 14:57

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

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

полезная ссылка А для детали здесь:

http://secretgeek.net/json_3mins.asp

31
ответ дан 19.05.2020, 14:57
  • 1
    На самом деле флаг не является основанным на DB атрибутом... Так... какой-либо другой путь? – Leem.fin 19.12.2019, 10:35

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

48
ответ дан 19.05.2020, 14:58
  • 1
    См. обновленный ответ, который использует не основанный на дб attibute тогда. – Michał Szajbe 19.12.2019, 10:35

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

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

, то Вы могли бы записать в Javascript

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

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

  • Обновление (десять лет спустя): не делайте этого, используйте JSON.parse
11
ответ дан 19.05.2020, 14:59

Мы должны сделать проект в колледже, и мы столкнулись с очень большой проблемой, это называют Той же политикой Источника. Amog другие вещи, это делает тот Ваш метод XMLHttpRequest из JavaScript, не может выполнить запросы к доменам кроме домена, что Ваш сайт идет.

, Например, Вы не можете выполнить запрос на www.otherexample.com, если Ваш сайт находится на www.example.com. JSONRequest признает, что, но Вы получите результат в формате JSON, если тот сайт признает что (например, это имеет веб-сервис, который возвращает сообщения в JSON). Это - одна проблема, где Вы могли использовать JSON, возможно.

Вот что-то практическое: Yahoo JSON

4
ответ дан 19.05.2020, 15:01
  • 1
    Спасибо. Мы знаем, что ответвление является псевдоинструкцией. Мне нравится Ваша попытка подсказать, когда использование одной инструкции может быть предпочтено другому. Но, я думаю, что скорость доступа равна для всех регистров (cos, ЦП синхронен), – Val 14.01.2020, 10:01

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

16
ответ дан 19.05.2020, 15:02
  • 1
    Спасибо за этот ответ.. Я искал много это. Для кого-либо еще, кто мог бы столкнуться с этим, я думаю you' ll получают ошибку MassAssignment, если Вы делаете это как этот. Можно избежать ошибки путем выполнения как так: new_car= Car.new, new_car.skip_method_2= params[:flag].present? – simha 19.12.2019, 10:34