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

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

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

Ответ 1

JSON (JavaScript Object Notation) - это легкий формат, который используется для обмена данными. Он основан на подмножестве языка 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 Vs 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, посмотрите это сообщение, которое объясняет и подтверждает в противном случае.


Рекомендации

Ответ 2

Объясненная концепция - без кода или технического жаргона

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

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

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

Я: В прозаическом английском правила довольно простые: как в случае с клеткой. Не так с JSON. Есть много способов описать что-то:

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

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

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

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

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

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

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

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

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

Хорошим способом было бы использовать json сериализатор - это библиотека, которая делает тяжелую работу за вас.

Резюме

JSON - это в основном способ передачи данных кому-то с очень и очень конкретными правилами. Использование пар значений и массивов ключей. Это объясненная концепция, на данный момент стоит прочитать конкретные правила, приведенные выше.

Ответ 3

Короче - 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 для различных языков программирования.

Ответ 4

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

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

Полезная ссылка для подробностей приведена здесь:

http://secretgeek.net/json_3mins.asp

Ответ 5

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

Ответ 6

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

Ответ 7

общий короткий ответ: если вы используете 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

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

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

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

Ответ 9

Что такое 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:

Данные в парах имя/значение. Данные разделяются запятыми. В фигурных скобках хранятся объекты. В квадратных скобках хранятся массивы.

Ответ 10

Мы должны сделать проект в колледже, и мы столкнулись с очень большой проблемой, это называется политикой того же происхождения. Другие вещи, это делает, что ваш метод XMLHttpRequest из Javascript не может делать запросы к доменам, отличным от домена, на котором находится ваш сайт.

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

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

Ответ 11

Различие между 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","[email protected]");

С 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':'[email protected]'});

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

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

 var Emp = new Employee({'name':'Mike', 'Id':'123', 'Phone':'23792747', 'email':'[email protected]'});

Ответ 12

Это очень просто. JSON обозначает Java Script Обозначение объектов. Подумайте об этом в качестве альтернативы использованию XML для передачи данных между программными компонентами.

Например, недавно я написал кучу веб-сервисов, которые вернули JSON, а некоторые разработчики Javascript затем написали код, который вызывал службы, и потреблял информацию, возвращаемую в этом формате.

Ответ 13

JSON (обозначение объекта Javascript) - это легкий формат данных для обмена/передачи данных. Его в ключевой паре значений, как и в JavaScript. Для REST API он широко используется для передачи данных от сервера к клиенту. В настоящее время многие сайты социальных сетей используют это. Хотя я не считаю это столь же надежным, как XML в отношении типов данных. XML имеет очень богатые типы данных и XSD. JSON в этом не хватает.

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

Ответ 14

Иногда техническая информация предоставляется там, где она не требуется, и хотя многие из главных голосовых ответов являются точными техническими и конкретными, я лично не думаю, что они более легки для понимания или краткости, как то, что можно найти в Википедии, или в официальная документация.

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

Используя пример реального мира, пусть притворяется, что у нас три человека. Один человек говорит Игбо как свой родной язык. Второй человек хотел бы взаимодействовать с первым человеком, однако первый человек говорит на Йорубе как на своем первом языке.

Что мы можем сделать?

К счастью, третий человек в нашем примере вырос, говоря по-английски, но также, как говорят, как Игбо, так и Йоруба как второй язык, и поэтому может выступать в качестве посредника между двумя первыми двумя людьми.

В мире программирования первым "человеком" является Python, второй "человек" - это Ruby, а третьим "человеком" является JSON, который просто так может "перевести" Ruby на Python и наоборот! Теперь очевидно, что эта аналогия не идеальна, но, как человек, который двуязычен, я считаю, что это простой способ взглянуть на то, как JSON взаимодействует с другими языками программирования.

Ответ 15

В контексте Java, одной из причин, по которой JSON может захотеть использоваться, является то, что он предоставляет очень хорошую альтернативу инфраструктуре сериализации Java, которая (исторически) была подвержена некоторым довольно серьезным уязвимостям.

Джошуа Блох подробно обсуждает это в статье 85 "Предпочитают альтернативы сериализации Java" (Effective Java 3rd Edition)

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

Ответ 16

Попробуйте использовать следующий код для анализа вашего ответа php json: read.php

<script
  src="https://code.jquery.com/jquery-3.2.1.min.js"
  integrity="sha256-hwg4gsxgFZhOsEEamdOYGBf13FyQuiTwlAQgxVSNgt4="
  crossorigin="anonymous"></script>
<script type="text/javascript">  
$.ajax({
    url:'index.php',
    data:{},
    type:"POST",
    success:function(result) {
        jsondecoded = $.parseJSON(result);
        $.each(jsondecoded, function(index, value) {
            $("#servers").text($("#servers").text() + " " + value.servername);
            console.log(value.start);
            console.log(value.end);
            console.log(value.id);
        });
    },
    statusCode: {
    404: function() {
      alert( "page not found" );
    }
  }
});
</script>

server.php

<?php 
echo '[{"start":"2017-08-29","end":"2017-09-01","id":"22"},{"start":"2017-09-03","end":"2017-09-06","id":"23"}]';
?>