Що таке JSON і навіщо я його використовую?


542

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

Я будую додатки за допомогою PHP, MySQL та Javascript / HTML деякий час, і якщо JSON може зробити щось, щоб полегшити моє життя чи покращити мій код або мій користувальницький інтерфейс, тоді я хотів би знати про це. Чи може хтось дати мені коротке пояснення?


2
JSON - це підмножина YAML yaml.org
Бред Гілберт

15
copterlabs.com/blog/json-what-it-is-how-it-works-how-to-use-це це приємний простий приклад використання
Том

1

1
+ Бред Гілберт Насправді - це власний спосіб вираження даних, і він схожий на JSON лише тому, що вони обидва виражають об'єкти як рядки (подібно до XML чи плістів чи багатьох інших), але JSON краще для машинного написання та YAML для людського письма .
Бен Оббін

Відповіді:


649

JSON (JavaScript Object Notation) - це легкий формат, який використовується для обміну даними. Він заснований на підмножині мови JavaScript (спосіб побудови об’єктів у JavaScript). Як зазначено в MDN , деякі JavaScript не є JSON, а деякі JSON - не JavaScript.

Прикладом того, де це використовується, є відповіді веб-служб. У старі часи веб-сервіси використовували XML як основний формат даних для передачі назад даних, але оскільки з'явився JSON ( формат JSON визначений в RFC 4627 Дугласом Крокфордом ), він був кращим форматом, оскільки це набагато більше легкий

Дізнатися більше можна на офіційному веб-сайті JSON .

JSON побудований на двох конструкціях:

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

Структура JSON



JSON Об'єктна діаграма

Діаграма масиву JSON

Діаграма значення 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- це об'єкт рядка типу, а не сам об'єкт. Щоб перетворити це на повноцінний об'єкт 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, перегляньте цю публікацію, яка пояснює та підтверджує інше.


Список літератури


1
Незалежно від способу серіалізації інформації, ви будете мати аналізатор, правда? Тому кого цікавить, який формат ви використовуєте для передачі даних, якщо деталі його реалізації будуть абстраговані.
Том Леман

6
Насправді, якщо ви передаєте дані клієнту та серверу туди-сюди, я думаю, що це дуже важливо бути уважними до розмірів відповідей.
Андреас Греч

9
Для педантичності існує пара символів, якими JSON обробляє інакше, ніж JavaScript, не дозволяючи йому бути суворим підмножиною: timelessrepo.com/json-isnt-a-javascript-subset
Джеремі Банкс

Коли ви говорите, що морве легше, ніж XML, ви посилаєтесь на розмір файлів чи має легкий вага просторове значення в кодуванні?
whatahitson

1
Так ви б замінили XML на JSON? Це те, що ти кажеш? Якщо так ... Чудово, xml - це кошмар.
Джеймс111

66

Пояснена концепція - немає коду чи технічного жаргону

Що таке JSON? - Як я пояснив це своїй дружині ТМ

Я: «В основному це спосіб спілкування з кимось у письмовій формі .... але з дуже конкретними правилами.

Дружина: так ....?

Я: У прозаїчній англійській мові правила досить пухкі: так само, як і при боротьбі з кліткою. Не так із 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 - це в основному спосіб передачі даних комусь із дуже, дуже специфічними правилами. Використання пар і масивів ключових значень. Це пояснено з концепцією, на даний момент варто прочитати конкретні правила вище.


48

Коротше кажучи - 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

Коротше кажучи, це сценарійні позначення для передачі даних про. Деякою альтернативою XML, що в основному підтримує основні типи даних, масиви та асоціативні масиви (пари іменних значень, що називаються об'єктами, тому що вони представляють).

Синтаксис, який використовується в JavaScript, а сам JSON означає "Нотація об'єкта JavaScript". Однак він став переносним і використовується і в інших мовах.

Корисне посилання для деталей знаходиться тут:

http://secretgeek.net/json_3mins.asp


19

Формат JSON часто використовується для серіалізації та передачі структурованих даних через мережеве з'єднання. Він використовується головним чином для передачі даних між сервером та веб-додатком, слугуючи альтернативою XML.


16

JSON - Повідомлення об’єкта JavaScript. Це набагато більш компактний спосіб передачі наборів даних через мережеві з'єднання порівняно з XML. Я пропоную використовувати JSON у будь-яких програмах, схожих на AJAX, де XML інакше був би «рекомендованим» варіантом. Багатослівність XML додасть часу для завантаження та збільшить споживання пропускної здатності ($$$). Ви можете досягти такого ж ефекту і з JSON, і його розмітка майже виключно присвячена самим даним, а не базовій структурі.


11

поширена коротка відповідь: якщо ви використовуєте 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

1
За допомогою eval () все було б оцінено. це ризик для безпеки.
Томас Веллер

@ThomasWeller Так, ця відповідь давня, я б пішов з JSON.parse зараз дякую!
Стівен А. Лоу

8

Мені подобається JSON в основному за те, що він такий лагідний . Для веб-вмісту, який можна отримати, це не обов'язково велика справа (отже, чому х html настільки популярний). Але бувають випадки, коли це може бути корисно.

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

Як додатковий бонус, якщо ви знайомі з Python або Javascript, ви вже майже знаєте JSON і можете інтерпретувати його без особливої ​​підготовки.


8

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

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


4

Ми повинні зробити проект у коледжі, і ми зіткнулися з дуже великою проблемою, це називається "Політика походження". Крім іншого, це означає, що ваш метод XMLHttpRequest з Javascript не може надсилати запити до доменів, окрім домену, на якому розміщено ваш сайт.

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

Ось щось практичне: Yahoo JSON


4

Різниця між 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'});

Важливе, що ми маємо пам’ятати, це те, що, якщо нам потрібно створити клас «Мобільний працівник» або модалі зі 100 елементами без методу JSON, ми повинні проаналізувати все при створенні класу. Але за допомогою JSON ми можемо визначити об'єкти вбудованими лише тоді, коли буде визначений новий об'єкт для класу.

тому цей рядок нижче - це спосіб робити речі з JSON (просто простий спосіб визначення речей)

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

2
Це не зовсім JSON - це об’єкт Javascript (не JSON)
Ben Aubin

4

Іноді технічна інформація надається там, де її ніхто не вимагає, і хоча багато відповідей, які голосують на головному рівні, є точно технічними та конкретними, я особисто не думаю, що вони є більш простими для розуміння або стислими, як те, що можна знайти у Вікіпедії чи в офіційна документація.

Те, як мені подобається думати про JSON, саме те, що воно є - мова всередині світу різних мов. Однак різниця між JSON та іншими мовами полягає в тому, що "всі" "розмовляють" JSON разом зі своєю "рідною мовою".

На прикладі реального світу зробимо вигляд, що у нас троє людей. Одна людина говорить Ігбо рідною мовою. Друга людина хотіла б взаємодіяти з першою людиною, проте перша особа розмовляє з Йорубою як їх першою мовою.

Що ми можемо зробити?

На щастя, третя людина в нашому прикладі виросла англійською, але також розмовляє як Ігбо та Йоруба як другі мови, і тому може виступати посередником між першими двома особами.

У світі програмування перша "людина" - Python, друга "людина" - Ruby, а третя "людина" - JSON, яка просто так може "перекласти" Ruby на Python і навпаки! Очевидно, що ця аналогія не є ідеальною, але, як хтось двомовний, я вважаю, що це простий спосіб подивитися на те, як JSON взаємодіє з іншими мовами програмування.


2

Це дуже просто. JSON розшифровується як Java Script Object Notation. Розгляньте це як альтернативу використанню XML для передачі даних між компонентами програмного забезпечення.

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


2

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

При такій же кількості рядкових даних JSON буде легшою порівняно з XML, оскільки XML має всі теги, що відкриваються та закриваються, тощо ...


0

У контексті Java одна з причин, чому JSON може захотіти використовуватись, полягає в тому, що він забезпечує дуже хорошу альтернативу серіалізаційній системі Java, яка, як показало (історично), піддається деяким досить серйозним уразливим ситуаціям.

Джошуа Блох детально обговорює це у пункті 85 "Кращі альтернативи серіалізації Java" (Ефективна версія 3-го Java)

Серіалізація Java спочатку мала на меті перевести структури даних у формат, який можна було легко передавати чи зберігати. JSON відповідає цій вимозі без серйозних подвигів, згаданих вище.


-3

Спробуйте наступний код, щоб проаналізувати відповідь на 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"}]';
?>

Хоча цей код може відповісти на питання, надаючи додатковий контекст щодо того, як та / або чому він вирішує проблему, покращить довгострокове значення відповіді.
Nic3500
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.