Co to jest JSON i dlaczego miałbym go używać?

Zajrzałem do Wikipedii, Wygooglowałem ją i przeczytałem oficjalną dokumentację, ale nadal nie doszedłem do punktu, w którym naprawdę rozumiem, czym jest JSON i dlaczego go używam.

Od jakiegoś czasu buduję aplikacje przy użyciu PHP, MySQL i Javascript / HTML i jeśli JSON może zrobić coś, co ułatwi mi życie, poprawi kod lub poprawi interfejs użytkownika, to chciałbym się o tym dowiedzieć. Czy ktoś może dać mi zwięzłe wyjaśnienie?

 551
Author: lev, 2008-12-20

17 answers

JSON (JavaScript Object Notation) jest lekki format, który jest używany do wymiany danych. jest oparty na podzbiorze języka JavaScript (sposób, w jaki obiekty są budowane w JavaScript). Jak stwierdzono w MDN, niektóre JavaScript nie jest JSON, a niektóre JSON nie jest JavaScript.

Przykładem tego, gdzie jest to używane, są odpowiedzi web services. W "starych" czasach Usługi internetowe używały XML jako podstawowego formatu danych do przesyłania danych wstecznych, ale od czasu pojawienia się JSON (format JSON jest określony w RFC 4627 przez Douglasa Crockforda), był preferowanym formatem, ponieważ jest znacznie bardziej lekki

Więcej informacji można znaleźć na oficjalnej stronie JSON.

JSON jest zbudowany na dwóch strukturach:

  • zbiór par nazwa / wartość. W różnych językach jest to realizowane jako obiekt, rekord, struktura, słownik, tablica hash, lista z kluczem lub tablica asocjacyjna.
  • An uporządkowana lista wartości. W większości języków jest to realizowane jako tablica, wektor, lista lub Sekwencja.

Struktura JSON



Diagram obiektu JSON

Diagram tablicy JSON

Diagram wartości JSON

JSON String diagram

Diagram liczby JSON

Oto przykład danych 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 w JavaScript

JSON (w Javascript) jest sznurek!

Ludzie często zakładają, że wszystkie obiekty Javascript są JSON i że JSON jest obiektem Javascript. To jest niepoprawne.

W Javascript var x = {x:y} jest nie JSON, jest to obiekt Javascript. To nie to samo. Odpowiednikiem JSON (reprezentowanym w języku Javascript) będzie var x = '{"x":"y"}'. x jest obiektem typu string nie jest obiektem własnym. Aby przekształcić to w pełnoprawny obiekt Javascript, musisz najpierw przeanalizować Informatyka, var x = JSON.parse('{"x":"y"}');, x jest teraz obiektem, ale to już nie jest JSON.

Zobacz Javascript object Vs JSON


Podczas pracy z JSON i JavaScript, możesz ulec pokusie, aby użyć funkcji eval do oceny wyniku zwróconego w wywołaniu zwrotnym, ale nie jest to sugerowane, ponieważ istnieją dwa znaki (U+2028 & U+2029) ważne w JSON, ale nie w JavaScript(Czytaj więcej tego tutaj ).

Dlatego zawsze trzeba próbować użyć skryptu Crockforda, który sprawdza poprawny JSON przed jego oceną. Link do wyjaśnienia skryptu znajduje się tutaj , a tutaj bezpośredni link do pliku js. Każda większa przeglądarka ma obecnie własną implementację do tego celu.

Przykład użycia parsera JSON (z json z powyższego fragmentu kodu):

//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'
};

Parser JSON oferuje również inną bardzo użyteczną metodę, stringify. Ta metoda akceptuje obiekt JavaScript jako parametr i wyprowadza z powrotem ciąg znaków w formacie JSON. Jest to przydatne, gdy chcesz wysłać dane z powrotem do serwera:

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}

Powyższe dwie metody (parse i stringify) pobierają również drugi parametr, który jest funkcją, która będzie wywoływana dla każdego klucza i wartości na każdym poziomie wyniku końcowego, a każda wartość zostanie zastąpiona przez wynik wprowadzonej funkcji. (Więcej na ten temat tutaj )

Btw, dla wszystkich, którzy myślą, że JSON jest tylko dla JavaScript, sprawdź ten post wyjaśnia i potwierdza co innego.


Referencje

 661
Author: Andreas Grech,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-03-30 08:20:08

Pojęcie wyjaśnione-Brak kodu ani żargonu technicznego

Co to jest JSON? - Jak wyjaśniłem to mojej żonie TM

Ja: "jest to w zasadzie sposób komunikowania się z kimś na piśmie....ale z bardzo specyficznymi zasadami.

/ align = "left" / ...?

Ja: w prozaicznym angielskim, zasady są dość luźne: tak jak w walce w klatce. Nie tak z JSONEM. Jest wiele sposobów na opisanie czegoś:

• Przykład 1: nasza rodzina ma 4 osoby: Ty, ja i 2 dzieci.

• Przykład 2: Nasza rodzina: ty, ja, kid1 i kid2.

• Przykład 3: Rodzina: [ty, ja, kid1, kid2]

• Przykład 4: mamy 4 osoby w naszej rodzinie: mamę, tatę, kid1 i kid2.

Dlaczego zamiast tego nie używają zwykłego angielskiego?

Ja: zrobiliby to, ale pamiętajcie, że mamy do czynienia z komputerami. Komputer jest głupi i nie będzie w stanie zrozumieć zdań. Więc musimy być bardzo konkretni, kiedy komputery są zaangażowane w przeciwnym razie stają się zdezorientowani. Co więcej, JSON jest dość skutecznym sposobem komunikacji, więc większość nieistotnych rzeczy jest wycięta, co jest dość ręczne. Jeśli chcesz komunikować się z naszą rodziną, do komputera, jeden sposób można to zrobić jest tak:

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

......i to jest w zasadzie JSON. Ale pamiętaj, musisz przestrzegać zasad gramatyki JSON. Jeśli złamiesz te zasady, komputer po prostu nie zrozumie (np. pisanie.

Jak pisać w Json?

Dobrym sposobem byłoby użycie serializera JSON - który jest biblioteką, która wykonuje ciężkie zadania za Ciebie.

Podsumowanie

JSON jest w zasadzie sposobem przekazywania danych komuś, z bardzo, bardzo specyficznymi zasadami. Używanie par wartości klucza i tablic.{[7] } jest to pojęcie wyjaśnione, w tym miejscu warto przeczytać szczegółowe zasady powyżej.

 72
Author: BKSpurgeon,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-10-08 14:07:34

W skrócie-JSON jest sposobem serializacji w taki sposób, że staje się kodem JavaScript. Po wykonaniu (z eval lub w inny sposób), kod ten tworzy i zwraca obiekt JavaScript, który zawiera dane serializowane. Jest to możliwe, ponieważ JavaScript dopuszcza następującą składnię:

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.

Możesz użyć tego do kilku celów. Po pierwsze, jest to wygodny sposób przekazywania danych z zaplecza serwera do kodu JavaScript. Dlatego jest to często używane w AJAX.

Możesz użyj go również jako samodzielnego mechanizmu serializacji, który jest prostszy i zajmuje mniej miejsca niż XML. Istnieje wiele bibliotek, które pozwalają serializować i deserializować obiekty w JSON dla różnych języków programowania.

 48
Author: Vilx-,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-12-20 20:54:12

W skrócie, jest to zapis skryptowy do przekazywania danych o W pewnym sensie alternatywa dla XML, natywnie wspierająca podstawowe typy danych, tablice i tablice asocjacyjne (pary nazwa-wartość, nazywane obiektami, ponieważ to właśnie one reprezentują).

Składnia jest używana w JavaScript, a sam JSON oznacza "JavaScript Object Notation". Jednak stał się przenośny i jest używany również w innych językach.

Przydatnym linkiem do szczegółów jest tutaj:

Http://secretgeek.net/json_3mins.asp

 31
Author: mson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-09-12 13:51:49

Format JSON jest często używany do serializacji i przesyłania ustrukturyzowanych danych przez połączenie sieciowe. Jest on używany głównie do przesyłania danych między serwerem a aplikacją internetową, służąc jako alternatywa dla XML.

 19
Author: Pinakin Nayi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-01-19 05:33:44

JSON to JavaScript Object Notation. Jest to znacznie bardziej kompaktowy sposób przesyłania zestawów danych przez Połączenia sieciowe w porównaniu do XML. Sugeruję użycie JSON w dowolnych aplikacjach typu AJAX, w których XML byłby" zalecany". Zwięzłość XML zwiększy czas pobierania i zwiększy zużycie przepustowości ($$$). Ten sam efekt można osiągnąć z JSON, a jego marża jest prawie wyłącznie dedykowana samym danym, a nie podstawowej strukturze.

 16
Author: Nolte,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-12-20 20:27:33

Typowa krótka odpowiedź brzmi: Jeśli używasz AJAX do wysyłania żądań danych, możesz łatwo wysyłać i zwracać obiekty jako ciągi JSON. Dostępne rozszerzenia obsługi Javascript toJSON () wywołuje wszystkie typy javascript do wysyłania danych do serwera w żądaniu AJAX. Odpowiedzi AJAX mogą zwracać obiekty w postaci łańcuchów JSON, które można przekształcić w Obiekty Javascript za pomocą prostego wywołania eval, np. jeśli funkcja AJAX someAjaxFunctionCallReturningJson zwróciła

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

Możesz napisać w Javascript

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

JSON może być również używany do usług internetowych i innych, ale jest to naprawdę wygodne dla wyników AJAX.

  • Update (dziesięć lat później): nie rób tego, użyj JSON.parse
 11
Author: Steven A. Lowe,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-09-19 07:42:54

Lubię JSON głównie dlatego, że jest taki zwięzły . Dla treści internetowych, które mogą być gziped, nie jest to koniecznie wielka sprawa (stąd dlaczego xhtml jest tak popularny). Ale są okazje, w których może to być korzystne.

Na przykład dla jednego projektu przekazywałem informacje, które musiały być serializowane i przesyłane przez XMPP. Ponieważ większość serwerów ograniczy ilość danych, które można przesłać w jednej wiadomości, uważam, że pomocne jest użycie JSON nad oczywistą alternatywą, XML.

Jako dodatkowy bonus, jeśli jesteś zaznajomiony z Pythonem lub Javascript, już prawie znasz JSON i możesz interpretować go bez większego szkolenia w ogóle.

 8
Author: Jason Baker,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-01-01 19:27:35

Co to jest JSON?

JavaScript Object Notation (JSON) jest lekkim formatem wymiany danych inspirowanym literałami obiektowymi JavaScript.

Wartości JSON mogą składać się z:

Objects (zbiory par nazwa-wartość) tablice (uporządkowane listy wartości) ciągi (w podwójnych cudzysłowach) numery true, false, or null

JSON jest niezależny od języka.

JSON z PHP?

Po wersji PHP 5.2.0 rozszerzenie JSON jest dekoduje i koduje funkcje jako domyślne.

Json_encode-zwraca reprezentację wartości w JSON Json_decode-dekoduje Łańcuch JSON Json_last_error-zwraca ostatni wystąpił błąd.

Składnia i zasady JSON?

Składnia JSON pochodzi ze składni JavaScript Object notation:

Dane są w parach nazwa / wartość Dane są oddzielane przecinkami Kręcone szelki trzymają przedmioty W nawiasach kwadratowych znajdują się tablice

 8
Author: Elangovan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-01-12 10:29:51

Czasami podaje się TECHNICZNE szczegóły tam, gdzie żadna nie jest wymagana, i chociaż wiele z najlepszych głosowanych odpowiedzi jest dokładnie technicznych i konkretnych, osobiście nie sądzę, że są one łatwiejsze do zrozumienia lub zwięzłe, jak to, co można znaleźć na Wikipedii lub w oficjalnej dokumentacji.

Sposób, w jaki lubię myśleć o JSON jest dokładnie tym, czym jest - językiem w świecie różnych języków. Jednak różnica między JSON a innymi językami jest taka, że "wszyscy ""mówią" JSON, wraz z ich " językiem ojczystym."

Używając przykładu z prawdziwego świata, udawajmy, że mamy trzy osoby. Jedna osoba posługuje się językiem Igbo jako językiem ojczystym. Druga osoba chciałaby wchodzić w interakcje z pierwszą osobą, jednak pierwsza osoba mówi Joruba jako ich pierwszy język.

Co możemy zrobić?

Na szczęście, trzecia osoba w naszym przykładzie dorastała mówiąc po angielsku, ale także mówi zarówno Igbo i Joruba jako drugie języki, a więc może działać jako pośrednik między dwoma pierwszymi osobami.

W świecie programowania Pierwsza" osoba "to Python, druga" osoba "to Ruby, a trzecia" osoba "to JSON, który tak się składa, że potrafi "przetłumaczyć" Rubiego na Python i odwrotnie! Oczywiście ta analogia nie jest idealna, ale jako ktoś, kto jest dwujęzyczny, wierzę, że jest to łatwy sposób, aby spojrzeć na to, jak JSON współdziała z innymi językami programowania.

 5
Author: Jerel,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-03-29 20:36:26

Musimy zrobić projekt na studiach i stanęliśmy przed bardzo dużym problemem, to się nazywa Polityka samego pochodzenia. Amog innych rzeczy, to sprawia, że XMLHttpRequest metoda z Javascript nie może składać wniosków do domen innych niż domeny, że witryna jest na.

Na przykład nie można złożyć żądania do www.otherexample.com jeśli Twoja strona jest na www.example.com. JSONRequest pozwala na to, ale otrzymasz wynik w formacie JSON, jeśli ta witryna na to pozwala(na przykład ma usługę internetową, która zwraca wiadomości w JSON). To jest jeden problem, w którym można użyć JSON być może.

Oto coś praktycznego: Yahoo JSON

 4
Author: gljivar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-06-25 15:00:01

Różnica między składnią JSON a konwencjonalną byłaby następująca (w Javascript)

Konwencjonalne

 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]");

Z JSON

Jeśli użyjemy JSON możemy zdefiniować w inny sposób jako

  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]'});

Ważną rzeczą, o której musimy pamiętać jest to, że jeśli mamy zbudować klasę "Employee" lub modal ze 100 elementami bez metody JSON, musimy parsować wszystko podczas tworzenia klasy. Ale z JSON możemy zdefiniować obiekty inline tylko wtedy, gdy nowy obiekt dla klasy jest zdefiniowany.

Więc ta linia poniżej jest sposobem robienia rzeczy z JSON (po prostu prosty sposób definiowania rzeczy)

 var Emp = new Employee({'name':'Mike', 'Id':'123', 'Phone':'23792747', 'email':'[email protected]'});
 4
Author: Ganesh Vellanki,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-10-22 10:21:56

To bardzo proste. JSON to skrót od Java Script Object Notation. Potraktuj to jako alternatywę dla używania XML do przesyłania danych między komponentami oprogramowania.

Na przykład niedawno napisałem kilka usług internetowych, które zwracały JSON, a niektórzy programiści Javascript napisali kod, który wywołał usługi i pochłonął informacje zwrócone w tym formacie.

 2
Author: Jon,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-06-25 15:12:58

JSON (Javascript object notation) jest lekkim formatem danych do wymiany/transferu danych. Jego w parze wartości klucza, jak JavaScript jest. Dla REST API jest szeroko stosowany do przesyłania danych z serwera do klienta. Obecnie korzysta z tego wiele serwisów społecznościowych. Chociaż nie widzę tego tak solidnego jak XML pod względem typów danych. XML ma bardzo bogate typy danych i XSD. JSON jest trochę brakuje w tym.

Dla tej samej ilości danych łańcuchowych JSON będzie lżejszy w porównaniu do XML, ponieważ XML ma wszystkie że znaczniki otwarcia i zamknięcia itp...

 2
Author: Shailendra Singh,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-11-20 07:54:27

W kontekście Javy, jednym z powodów, dla których JSON może chcieć być używany, jest to, że stanowi bardzo dobrą alternatywę dla Java Serialization framework, który okazał się (historycznie) narażony na dość poważne luki.

Joshua Bloch omawia to szczegółowo w punkcie 85 " preferuj alternatywy serializacji Java "(skuteczna 3. Edycja Java)

Serializacja Javy początkowo miała na celu przełożenie struktur danych na format, który może być łatwo przesyłane lub przechowywane. JSON spełnia ten wymóg, bez poważnych exploitów, o których mowa powyżej.

 0
Author: johnm,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-03-05 15:41:53

Zrozumienie JSON

JSON jest tylko formatem tekstowym, którego większość interfejsów API REST używa do zwracania danych. Innym popularnym formatem jest XML, ale XML jest nieco bardziej wyrazisty.

Oto mały przykład JSON:
// JSON object
{
  "name": "John",
  "age": 20
}

// JSON array
[
  {
    "name": "John",
    "age": 20
  },
  {
    "name": "Peter",
    "age": 22
  }
]

Zauważ, że urywek zaczyna się nawiasem klamrowym {, który wskazuje obiekt. JSON może również zaczynać się jako tablica, która używa nawiasu kwadratowego [ do oznaczenia początku tablicy. JSON musi być poprawnie sformatowany, więc wszystko zaczyna się { i [ symbole muszą mieć swoje symbole końcowe: } i ].

JSON może zawierać obiekt lub tablicę. Obiekt w JSON jest zawinięty wewnątrz nawiasów klamrowych { … }, podczas gdy tablica jest zawinięta w nawiasy kwadratowe [ … ].

JSON strukturyzuje dane według wartości klucza. kluczem jest zawsze łańcuch , ale wartością może być cokolwiek (String, number, JSON object, JSON array...). Wpłynie to na sposób, w jaki przetwarzamy JSON w kolejnych krokach.

 0
Author: Paresh Mangukiya,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-11-10 05:00:38

Wypróbuj poniższy kod, aby przeanalizować odpowiedź php json: Czytaj.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>

Serwer.php

<?php 
echo '[{"start":"2017-08-29","end":"2017-09-01","id":"22"},{"start":"2017-09-03","end":"2017-09-06","id":"23"}]';
?>
 -3
Author: amit rawat,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-08-29 08:46:24