Come configurare smartphone e PC. Portale informativo
  • casa
  • Notizia
  • Cos'è JSON? Formato JSON: esempio e descrizione.

Cos'è JSON? Formato JSON: esempio e descrizione.

Composto da coppie attributo-valore. Questo è il formato di dati più comune utilizzato per la comunicazione asincrona tra il browser e il server, in gran parte sostituendo XML (usando AJAX).

JSON è un formato di dati indipendente dalla lingua derivato da JavaScript. A partire dal 2017, molti linguaggi di programmazione utilizzano il codice per generare e analizzare i dati solo in esso. I nomi dei file JSON utilizzano l'estensione .json.

Storia della creazione

Il formato JSON è stato originariamente sviluppato da Douglas Crockford all'inizio degli anni 2000 e successivamente due standard concorrenti (RFC 7159 ed ECMA-404) lo hanno definito nel 2013. Lo standard ECMA descrive solo la sintassi valida, mentre l'RFC copre alcune nozioni di base sulla sicurezza e l'interoperabilità.

Inoltre, esiste RFC 7493, che definisce un profilo limitato noto come I-JSON (abbreviazione di "Internet JSON"). Cerca di superare alcuni problemi di interoperabilità. Ciascuno di questi documenti è un documento JSON valido.

L'esigenza di creare questo formato nasce dall'esigenza di un vero e proprio protocollo di comunicazione tra il server e il browser, effettuato in tempo reale senza l'utilizzo di plug-in (come Flash o applet Java).

Sviluppo e applicazione

Come già notato, Douglas Crockford, in qualità di fondatore di StateSoftware, identificò e rese popolare per primo il formato JSON. Successivamente, i co-fondatori hanno deciso di creare un sistema che utilizza le funzionalità standard del browser e hanno fornito un livello di astrazione agli sviluppatori per creare applicazioni con connettività duplex continua al server web. Allo stesso tempo, è stato possibile mantenere aperte due connessioni HTTP ed elaborarle fino all'orario di lavoro standard del browser se non è stato effettuato alcuno scambio di dati. I co-fondatori hanno tenuto una tavola rotonda e hanno votato per nominare il formato dei dati JSML o JSON, oltre a determinare il tipo di licenza in base alla quale sarà reso disponibile il nuovo sviluppo. Il formato è attualmente open source.

Uso pratico

Il sito Web JSON.org è stato lanciato nel 2002. Nel dicembre 2005, Yahoo! ha iniziato a offrire alcuni dei suoi servizi web in questo formato. Google ha iniziato a utilizzare i feed JSON per il suo protocollo Web GData solo nel dicembre 2006.

Il formato di file JSON era originariamente concepito e comunemente utilizzato insieme a un sottoinsieme del linguaggio di scripting JavaScript (in particolare, Standard ECMA-262 3a edizione-dicembre). Tuttavia, questo è un formato indipendente dalla lingua. Il codice per l'analisi e la generazione di dati JSON è disponibile in molti linguaggi di programmazione. Il sito Web JSON elenca tutte le librerie.

Sebbene il formato JSON online fosse originariamente pubblicizzato come un sottoinsieme rigoroso di JavaScript ed ECMAScript, occasionalmente consente alcuni caratteri a cui non viene eseguito l'escape nelle stringhe che sono illegali nelle stringhe JavaScript ed ECMAScript.

Lo stesso JSON è diventato uno standard internazionale ECMA nel 2013 come standard ECMA-404, utilizzato come riferimento nella RFC 7158 dello stesso anno. Nel 2014 RFC 7159 è diventato il riferimento principale per l'utilizzo di JSON sul web (es. applicazione MIME/json).

Tipi di dati, sintassi ed esempio

I principali tipi di dati JSON sono:

  • Numero: un numero decimale con segno che può contenere una parte frazionaria e può utilizzare la notazione E esponenziale, ma non può includere non numeri (come NaN). Il formato non distingue tra numeri interi e numeri in virgola mobile. JavaScript utilizza il formato a virgola mobile a doppia precisione per tutti i suoi valori numerici, ma altri linguaggi che implementano JSON potrebbero codificarli in modo diverso.

  • Stringa: una sequenza di zero o più caratteri Unicode. Le stringhe sono delimitate da virgolette doppie e supportano la sintassi della barra rovesciata.
  • Letterali: uno qualsiasi dei valori vero o falso.
  • Array: un elenco ordinato di zero o più valori, ognuno dei quali può essere di qualsiasi tipo. Le matrici usano parentesi quadre con virgole.
  • Oggetto: una raccolta non ordinata di coppie nome/valore in cui i nomi (chiamati anche chiavi) sono stringhe. Poiché gli oggetti sono destinati a rappresentare matrici associative, è consigliabile (sebbene non obbligatorio) che ogni chiave sia univoca al suo interno. Gli oggetti sono separati da parentesi graffe e utilizzano le virgole per separare ogni coppia, mentre all'interno di ogni coppia un carattere due punti separa la chiave o il nome dal suo valore.
  • Null: un valore vuoto che utilizza la parola nulla.

Gli spazi delimitati sono consentiti e possono essere posizionati attorno o tra gli elementi della sintassi (significati e segni di punteggiatura, ma non all'interno di un valore di stringa). A tale scopo, vengono considerati spazi solo quattro caratteri speciali: spazio, tabulazione orizzontale, nuova riga e barra. In particolare, il contrassegno dell'ordine dei byte non deve essere generato dall'implementazione conforme (sebbene possa essere accettato durante l'analisi di JSON). La richiesta JSON non fornisce la sintassi per i commenti.

Le prime versioni (come quelle specificate nella RFC 4627) richiedevano che un documento valido fosse costituito solo da un tipo di oggetto o matrice, che poteva contenere altri tipi al loro interno. Questo formato JSON, di cui è possibile trovare un esempio nelle pagine Web legacy, non è attualmente utilizzato.

Problemi di portabilità dei dati

Anche se Douglas Crockford ha originariamente affermato che JSON è un sottoinsieme rigoroso di JavaScript, le sue specifiche consentono in realtà di creare documenti illeggibili in JavaScript. In particolare, JSON consente ai valori delle stringhe Unicode U+2028 LINE SEPARATOR e U+2029 PARAGRAPH SEPARATOR di apparire senza escape nelle stringhe tra virgolette, mentre JavaScript no. Questa è una conseguenza del fatto che JSON non consente solo i "caratteri di controllo". Per la massima compatibilità, questi caratteri devono essere sottoposti a escape con una barra rovesciata. Questa sottigliezza è importante durante la creazione di JSONP.

Formato JSON: come aprire?

I documenti JSON possono essere codificati in UTF-8, UTF-16 o UTF-32, la codifica predefinita è UTF-8. Questi standard supportano l'intero set di caratteri "Unicode", inclusi i caratteri al di fuori del piano multilingue di base (da U+10000 a U+10FFFF). Tuttavia, in caso di escape, questi caratteri devono essere scritti utilizzando coppie di surrogati UTF-16, un dettaglio mancato da alcuni parser del formato JSON. Come aprire e come verrà letto tale file?

I numeri in questo formato sono indipendenti dalla loro rappresentazione nei linguaggi di programmazione. Non c'è distinzione tra un valore intero e un valore in virgola mobile: alcune implementazioni possono trattare 42, 42.0 e 4.2E + 1 come lo stesso numero, mentre altre no. Inoltre, non ci sono requisiti relativi a problemi quali overflow, underflow, perdita di precisione o arrotondamento. Inoltre, il formato JSON non dice nulla sulla gestione degli zeri con segno, indipendentemente dal fatto che 0.0 sia diverso da -0.0. La maggior parte delle implementazioni che utilizzano lo standard a virgola mobile IEEE 754, incluso JavaScript, conserva gli zeri con segno, ma non tutte le implementazioni JSON possono farlo.

Utilizzo in JavaScript

Poiché il formato JSON è stato derivato da JavaScript e la sua sintassi è (principalmente) un sottoinsieme del linguaggio, la funzione JavaScripteval può essere utilizzata per analizzare i dati JSON. A causa del problema con l'analisi dei terminatori di stringa Unicode discusso nella sezione precedente, la funzione eval deve sostituirli.

Questo non è sicuro se la stringa non è convalidata correttamente. Invece, dovresti usare la libreria del parser JSON o il suo supporto JavaScript per leggere e scrivere JSON.

Un parser correttamente implementato accetta solo il formato JSON valido come definito dal sistema, impedendo l'esecuzione involontaria di codice potenzialmente dannoso.

Dal 2010, i browser Web come Firefox e Internet Explorer hanno incluso il supporto per l'analisi e il caricamento in formato JSON.

Tipi di dati nativi non supportati

La sintassi JavaScript definisce diversi tipi di dati nativi che non sono inclusi nello standard JSON: Map, Set, Date, Error, Regular Expression, Function e pochi altri. Questi tipi di dati JavaScript devono essere rappresentati in un altro formato, con entrambi i programmi che concordano su come convertire tra tipi. Oggi esistono alcuni standard de facto, come la conversione di una data in una stringa, ma nessuno di essi è universalmente accettato. Altre lingue possono avere un diverso insieme di tipi nativi, che devono essere serializzati con cura per gestire questo tipo di conversione.

Schema JSON

Lo schema viene utilizzato per definire la struttura dei dati JSON per la convalida, la documentazione e la gestione dell'interazione. Fornisce una sorta di contratto per i dati richiesti dall'applicazione e un modo per modificarlo.

Lo schema si basa sui concetti di XML Schema (XSD), ma è proprietario. Come in XSD, le stesse funzionalità di serializzazione/deserializzazione vengono utilizzate sia per lo schema che per i dati.

Schema è un progetto Internet attualmente nella versione 5 (rilasciato il 13 ottobre 2016). Sono disponibili diversi validatori per diversi linguaggi di programmazione, ciascuno con un diverso livello di conformità. Non esiste un'estensione di file standard, ma alcuni esperti suggeriscono che .schema.json sia approvato.

tipo MIME

Il tipo MIME ufficiale per il testo JSON è "application/json". Sebbene la maggior parte delle moderne implementazioni abbia adottato un tipo MIME ufficiale, molte applicazioni continuano a fornire supporto legacy per altri tipi MIME. Molti provider di servizi, browser, server, applicazioni Web, librerie, framework e API utilizzano, prevedono o riconoscono un tipo MIME il cui contenuto è simile a "text/json" o "text/javascript". Esempi degni di nota includono l'API di ricerca di Google, Yahoo!, Flickr, l'API di Facebook, DojoToolkit 0.4 e così via.

JSON-RPC

JSON-RPC è un protocollo di chiamata di procedura remota (RPC) basato su JSON, creato in sostituzione di XML-RPC o SOAP. È un protocollo semplice che definisce solo alcuni tipi di dati e comandi. Consente al sistema di inviare notifiche (informazioni a un server che non richiedono una risposta) e più chiamate al server a cui è possibile rispondere fuori servizio.

AJAJ

JavaScript asincrono e JSON (o AJAJ) si riferiscono alla stessa metodologia di pagina Web dinamica di Ajax, ma invece di XML, il formato dati JSON è quello principale. AJAJ è una tecnologia di sviluppo web che consente a una pagina web di richiedere nuovi dati dopo essere stata caricata nel browser. Di solito li esegue il rendering dal server in risposta alle azioni dell'utente su quella pagina. Ad esempio, ciò che l'utente inserisce in una casella di ricerca, il codice client lo invia al server, che risponde immediatamente con un elenco a discesa di elementi di database corrispondenti.

Problemi di sicurezza

Il testo in formato JSON è definito come oggetto di serializzazione dei dati. Tuttavia, il suo design, come sottoinsieme libero del linguaggio di scripting JavaScript, introduce diversi problemi di sicurezza. Si concentrano sull'utilizzo dell'interprete Javascript per eseguire dinamicamente il testo JSON come JavaScript inline. Ciò espone il programma a script errati o dannosi. Questo è un problema serio quando si lavora con i dati recuperati da Internet.

Questo metodo semplice e popolare, ma rischioso, utilizza la compatibilità con la funzione JavaScripteval.

Alcuni sviluppatori credono erroneamente che il testo JSON sia anche sintatticamente simile al codice JavaScript, sebbene ciò sia vero solo in parte. Pertanto, si ritiene che un modo semplice per un programma JavaScript di analizzare i dati in questo formato sia utilizzare la funzione JavaScripteval incorporata, progettata per valutare le espressioni Javascript. Invece di utilizzare un parser specifico, l'interprete stesso viene quindi utilizzato per eseguire i dati JSON, creando oggetti JavaScript nativi. Tuttavia, questo metodo è rischioso se esiste la possibilità che i dati JSON contengano codice "javascript" arbitrario, che verrà quindi eseguito allo stesso modo. Se non vengono adottate misure per convalidare prima i dati, il metodo eval è soggetto a vulnerabilità di sicurezza in cui i dati e l'intero ambiente JavaScript non sono sotto il controllo di un'unica fonte attendibile.

Ad esempio, se i dati non vengono verificati, vengono attaccati da codice JavaScript dannoso. Tali violazioni possono anche creare il rischio di furto di dati, falsificazione dell'autenticazione e altro potenziale uso improprio di dati e risorse.

Quindi la nuova funzione JSON.parse è stata progettata come un'alternativa più sicura a eval. È progettato specificamente per elaborare dati JSON, non JavaScript. Inizialmente era previsto che fosse incluso nella quarta edizione dello standard ECMAScript, ma ciò non è avvenuto. È stato aggiunto per la prima volta nella versione 5 ed è ora supportato dai principali browser.

JSON (JavaScript Object Notation) è un formato per lo scambio di dati testuali. Consente di trasferire strutture di dati complesse in una forma serializzata. Questo formato di trasferimento dati è diventato così popolare che dalla versione 5.2.0 del core PHP sono state aggiunte funzioni per l'elaborazione dei dati in questo formato. E questo significa che non è necessario collegare estensioni aggiuntive. Il formato dei dati JSON è ben compreso da un essere umano. Inoltre, questo tipo di scambio di dati è ampiamente utilizzato tra vari servizi API. E con il corretto sviluppo di algoritmi per lo scambio di informazioni, puoi ottenere un aumento di velocità molto elevato rispetto, ad esempio, quando si lavora con dati in formato XML.

Invio dati

Esistono due modi per inviare dati in formato JSON: formare una richiesta GET o POST con dati codificati che si trovano nella variabile GET o POST, oppure inserire i dati nel corpo del documento. In pratica, viene solitamente utilizzata la seconda opzione.

Per inviare i dati sono necessarie le seguenti funzioni:

  • corda json_encode(valore misto [, opzioni int = 0 ])

    Il parametro value specifica i dati da codificare. Qualsiasi tipo è supportato tranne il tipo risorsa. Il parametro options contiene una maschera di bit dei possibili valori forniti (vedi tabella con costanti fornite JSON).

  • risorsa stream_context_create (])

    Questa funzione ha lo scopo di creare e restituire un contesto di thread con le opzioni specificate nel parametro options. Il parametro delle opzioni facoltative deve essere un tipo di matrice associativa. Inizialmente è vuoto. Anche il secondo parametro params opzionale deve essere un array associativo nel formato $data['name'] = valore.

  • corda file_get_contents(string filename [, bool use_include_path [, contesto della risorsa [, int offset [, int maxlen ]]]]])

    L'utilizzo di questa funzione consente di ottenere il contenuto di un file come stringa. Il parametro filename è il nome del file da leggere. Nel parametro use_include_path, a partire da PHP 5, puoi usare la costante FILE_USE_INCLUDE_PATH per cercare un file nel percorso di inclusione. Il parametro di contesto rappresenta la risorsa di contesto creata con la funzione stream_context_create(). In caso di tentativo fallito di aprire il file, il valore verrà restituito. falso. Il parametro offset contiene l'offset da cui iniziare a leggere i dati. Il parametro maxlen specifica la dimensione dei dati ricevuti.

    Nota: l'offset non è specificato quando si lavora con thread remoti.

Quello che segue è un esempio di invio di dati in formato JSON:

// Dati da inviare $request = array("StartDate" => "2013-10-10", "EndDate" => "2013-10-10", "IDS" => array(1,2,3,4 ,5,6,7)); // Specifica delle opzioni per il contesto del flusso $options = array ("http" => array ("method" => "POST", "header" => "Content-Type: application/json; charset=utf-8\r \ n", "contenuto" => json_encode($richiesta))); // Crea un contesto di flusso $context = stream_context_create($options); // Invio dei dati e ottenimento del risultato echo file_get_contents("http://test.ru/json.php", 0, $context);

Utilizza una struttura di dati improvvisata composta da una data di inizio e di fine, nonché una matrice di numeri di alcuni record condizionali. Si noti che nell'intestazione della richiesta tipo di contenuto viene specificato il tipo "application/json".

Ottenere dati

Per ricevere i dati trasmessi nel modo sopra indicato, è necessario leggere i dati dal flusso di input “ php://input”.

Funzioni utilizzate per accettare i dati:

  • misto json_decode(string json [, bool assoc = false [, int depth = 512 [, int options = 0 ]]])

    Questa funzione decodifica una stringa JSON. Il parametro json specifica la stringa da decodificare. Il parametro assoc controlla se i dati restituiti verranno convertiti in un array associativo. Se è necessario, è necessario specificare come valore di questo parametro VERO. Il parametro depth indica la profondità della ricorsione. E l'ultimo quarto parametro options contiene la maschera di bit delle opzioni da decodificare. Attualmente supportato solo JSON_BIGINT_AS_STRING(per impostazione predefinita, i numeri interi grandi vengono convertiti in numeri in virgola mobile (virgola mobile))

  • risorsa fope(string filename , string mode [, bool use_include_path [, contesto della risorsa ]])

    Apre un file e ne restituisce l'handle. Il parametro filename è una risorsa denominata che punta a un file. Il parametro mode specifica il tipo di accesso al file (consultare la tabella per un elenco delle modalità possibili per fopen()). Successivamente ci sono due parametri opzionali: use_include_path e context . Quando si imposta il parametro use_include_path su VERO o 1 e a condizione che sia specificato un percorso relativo come risorsa denominata, il file da aprire verrà ricercato nell'elenco delle directory utilizzate dalle funzioni includere e richiedere. In pratica, questo parametro non viene praticamente utilizzato. Il parametro context viene utilizzato per specificare il contesto della risorsa.

  • corda stream_get_contents(handle delle risorse [, int maxlen = -1 [, int offset = -1 ]])

    Questa funzione consente di ottenere il contenuto dello stream come stringa. Il parametro handle è una risorsa di flusso. Il parametro maxlen contiene il numero massimo di byte da leggere. Per impostazione predefinita, è impostato su -1, che indica che tutti i dati sono stati ricevuti. Il parametro offset contiene l'offset da cui iniziare a leggere i dati. È anche impostato su -1 per impostazione predefinita, il che significa che leggerà dalla posizione iniziale.

Di seguito è riportato un esempio di acquisizione di dati in formato JSON sul lato server:

// Apre il flusso di input per leggere $f = fopen("php://input", "r"); // Ottieni il contenuto dello stream $data = stream_get_contents($f); if ($data) ( // Codice di elaborazione print_r(json_decode($data)); )

La struttura dei dati risultante:

Oggetto StdClass ( => 2013-10-10 => 2013-10-10 => Array ( => 1 => 2 => 3 => 4 => 5 => 6 => 7))

Nota: è necessario tenere conto del fatto che per poter lavorare con il formato JSON, i dati devono essere codificati in utf-8.

Costanti fornite da JSON per la funzione json_encode()

JSON_HEX_TAG (numero intero) Tutti sono codificati in \u003C e \u003E. Disponibile da PHP 5.3.0.
JSON_HEX_AMP (numero intero) Tutti i & sono codificati in &. Disponibile da PHP 5.3.0.
JSON_HEX_APOS (numero intero) Tutti i caratteri ' sono codificati in \u0027. Disponibile da PHP 5.3.0.
JSON_HEX_QUOT(numero intero) Tutti i caratteri " sono codificati in \u0022. Disponibile da PHP 5.3.0.
JSON_FORCE_OBJECT(numero intero) Restituisce un oggetto invece di un array quando si utilizza un array non associativo. Ciò è utile quando il programma o il codice ricevente si aspetta un oggetto o l'array è vuoto. Disponibile da PHP 5.3.0.
JSON_NUMERIC_CHECK(numero intero) Codifica di stringhe contenenti numeri come numeri. Disponibile da PHP 5.3.3.
JSON_BIGINT_AS_STRING(intero) Codifica numeri interi grandi come equivalenti di stringa. Disponibile da PHP 5.4.0.
JSON_PRETTY_PRINT(numero intero) Usa gli spazi bianchi nei dati restituiti per formattarli. Disponibile da PHP 5.4.0.
JSON_UNESCAPED_SLASHES (numero intero) Non scappare /. Disponibile da PHP 5.4.0.
JSON_UNESCAPED_UNICODE(intero) Non codificare caratteri Unicode multibyte (per impostazione predefinita sono codificati come \uXXXX). Disponibile da PHP 5.4.0.

Elenco di possibili modalità per fopen() using mode

'r' Apre un file di sola lettura; posiziona il puntatore all'inizio del file.
'r+' Apre un file per la lettura e la scrittura; posiziona il puntatore all'inizio del file.
'w' Apre un file solo per la scrittura; posiziona il puntatore all'inizio del file e tronca il file a lunghezza zero. Se il file non esiste, tenta di crearlo.
'w+' Apre un file per la lettura e la scrittura; posiziona il puntatore all'inizio del file e tronca il file a lunghezza zero. Se il file non esiste, tenta di crearlo.
'un' Apre un file solo per la scrittura; posiziona un puntatore alla fine del file. Se il file non esiste, tenta di crearlo.
'a+' Apre un file per la lettura e la scrittura; posiziona un puntatore alla fine del file. Se il file non esiste, tenta di crearlo.
'X' Crea e apre solo per la scrittura; posiziona il puntatore all'inizio del file. Se il file esiste già, la chiamata fopen() fallirà, restituirà FALSE e genererà un errore di livello E_WARNING. Se il file non esiste, proverà a crearlo. Ciò equivale a specificare i flag O_EXCL|O_CREAT per la chiamata di sistema interna open(2).
'x+' Crea e apre per leggere e scrivere; altrimenti ha lo stesso comportamento di 'x'.
'c' Apre un file in sola scrittura. Se il file non esiste, viene creato. Se il file esiste, non viene troncato (a differenza di 'w') e una chiamata a questa funzione non genera un errore (come nel caso di 'x'). Il puntatore del file verrà impostato all'inizio del file. Questo può essere utile se vuoi bloccare il file (vedi flock()) prima di cambiarlo, poiché usando 'w' puoi troncare il file prima che il lock sia stato acquisito (se vuoi troncare il file, puoi usare ftruncate () funzione dopo aver richiesto il blocco).
'c+' Apre un file per la lettura e la scrittura; altrimenti ha lo stesso comportamento di 'c'.

JavaScript ci consente non solo di aggiungere interattività alle pagine Web, ma consente di eseguire attività che un tempo appartenevano ai server. JSON fornisce un modo semplice per creare e archiviare dati strutturati in JavaScript. JSON è molto popolare ed è un'ottima alternativa a XML. JSON (JavaScript Object Notation), come suggerisce il nome, si basa sulla creazione di oggetti javascript. Gli oggetti JavaScript possono essere facilmente manipolati, analizzati utilizzando lo stesso JavaScript.

A differenza di XML, le frasi JSON sono facilmente composte sia da esseri umani che da computer. I dati in formato JSON possono, ad esempio, essere assegnati ad una variabile (così creiamo un oggetto); questi dati possono quindi essere letti attraverso l'oggetto appena creato.

Innanzitutto, creiamo una variabile per contenere i nostri dati, quindi definiamo un oggetto utilizzando JSON. Il nostro oggetto è piuttosto semplice: un campo firstName e un valore Ray. Le stringhe in JSON devono essere racchiuse tra virgolette. Se stai usando i numeri, le virgolette sono facoltative.

Questo esempio visualizzerà il valore della proprietà firstName nel browser.

Creazione di un oggetto segnaposto

Creiamo un esempio più realistico: inseriamo i nostri dati JSON in un oggetto DOM.

var data="("firstName":"Ray"); document.getElementById("segnaposto").innerHTML=data.firstName;

Ora, invece di visualizzare un avviso, inseriamo i dati all'interno dell'elemento HTML. I dati JSON possono ovviamente essere molto più complessi. Proviamo ad aggiungere altri campi.

data=( "firstName":"Ray", "lastName":"Villalobos", "joined":2012 ); document.getElementById("placeholder").innerHTML=data.firstName+" "+data.lastName+" "+data.joined;

Nota che i dati JSON sono formattati in un certo modo per una migliore comprensione. Il campo "unito" è 2012, che non ha bisogno di virgolette perché è un numero. Diamo un'occhiata a qualcosa di più complesso.

Aggiunta di array

E se volessimo entrare in un gruppo di persone... allora abbiamo bisogno di usare gli array. Un array in JSON può essere creato usando parentesi quadre. Vediamo come cercheranno i nostri dati per diversi utenti.

Var data=("users":[ ( "firstName":"Ray", "lastName":"Villalobos", "joined":2012 ), ( "firstName":"John", "lastName":"Jones", "joined":2010 ) ]) document.getElementById("placeholder").innerHTML=data.users.firstName + " " + data.users.lastName+" "+ data.users.joined;

Sembra un po' più complicato, ma in realtà non è difficile da capire. L'oggetto JSON viene creato utilizzando parentesi graffe; una matrice viene creata utilizzando parentesi quadre. Quindi, per organizzare i nostri dati, abbiamo creato un oggetto utenti e inserito un array. L'array contiene altri oggetti. Ciascuna coppia (nome/valore) è separata da una virgola.

Nota come è cambiato il codice di inserimento del nome. Abbiamo incluso un nuovo oggetto utenti e quindi utilizzato parentesi quadre per puntare al primo elemento nell'array. Aggiungiamo un altro livello alla nostra struttura dati.

Var data=("users":[ ( "firstName":"Ray", "lastName":"Villalobos", "joined": ( "month":"Gennaio", "day":12, "year":2012 ) ), ( "firstName":"John", "lastName":"Jones", "joined": ( "month":"April", "day":28, "year":2010 ) ) ]) documento. getElementById("placeholder").innerHTML=data.users.firstName + " " + data.users.lastName+"--"+ data.users.joined.month;

La proprietà unita ora contiene un oggetto con più campi; non è necessario utilizzare un array, quindi utilizziamo la notazione degli oggetti. Ora abbiamo i dati per diversi utenti, è il momento di esaminare ogni utente ed elencarli.

Implementazione di un elenco di utenti (attraverso l'oggetto JSON)

Quindi usiamo javascript e creiamo un elenco di utenti.

Var data = ( "users":[ ( "firstName":"Ray", "lastName":"Villalobos", "joined": ( "month":"Gennaio", "day":12, "year":2012 ) ), ( "firstName":"John", "lastName":"Jones", "joined": ( "month":"April", "day":28, "year":2010 ) ) ]) var output ="

    "; ) output+="
"; document.getElementById("segnaposto").innerHTML=output;

Per enumerare tutte le proprietà di un oggetto, esiste una costruzione per..in:

For(var chiave in oggetto) ( // chiave - nome proprietà // oggetto - valore proprietà... )

Qui stiamo iterando su tutti gli elementi dell'array; memorizziamo i dati nella variabile di output e mettiamo i dati nell'elemento con id uguale a segnaposto. puoi dire che i nostri dati stanno crescendo un po' lentamente.

Leggi JSON da file esterno

Sarebbe bello salvare i dati su un file esterno e leggerli secondo necessità. Userò la libreria jQuery, quindi prima dobbiamo includere la libreria jQuery; quindi chiama la funzione getJSON. Ecco come appare il nostro codice:

Esempio JSON

Praticamente lo stesso codice, ma i dati vengono espulsi. Abbiamo appena racchiuso tutto in una funzione getJSON che fa tutto il duro lavoro di lettura del file. Il file di dati data.json dovrebbe trovarsi nella stessa directory e si presenta così:

("users":[ ( "firstName":"Ray", "lastName":"Villalobos", "joined": ( "month":"Gennaio", "day":12, "year":2012) ), ( "firstName":"John", "lastName":"Jones", "joined": ( "month":"April", "day":28, "year":2010 ) ) ])

Come puoi vedere, JSON è davvero facile da leggere e, una volta che ti abitui alle parentesi, diventa facile codificare.

JSON fa parte dello standard ECMAScript dal 1999, quando ECMA ha definito la funzione eval() per accettare il formato. Ha iniziato a guadagnare popolarità insieme al crescente successo dell'Ajax. La parola JSON viene spesso fuori quando qualcuno parla di Ajax. È noto che JSON è un formato di dati diverso, che sta sostituendo XML e che molti programmatori lo supportano attivamente. Ma cos'è esattamente JSON e quali sono i suoi vantaggi?

Perché JSON?

Il vantaggio di JSON è che è riconosciuto da JavaScript. Non è necessario analizzare il documento, come nel caso di XML, per trasferire i dati su Internet.

JSON e XML

Vantaggi di JSON:

  • Facile da leggere e capire.
  • Facile da usare.

Vantaggi di XML:

  • Ha espandibilità

Sia XML che JSON hanno la capacità di integrare una grande quantità di dati in forma binaria.

Sintassi JSON

Componenti JSON:

  • Oggetti: contengono oggetti o attributi.
  • Variabili scalari: numero, stringa, booleana.
  • Vettore.
  • Valori letterali: nullo, VERO, falso, "stringa di caratteri", e valori numerici.

Un oggetto

Contiene un elemento o un elenco di elementi, in cui ogni elemento è descritto come segue:

"nome" : "valore"

Sintassi dell'oggetto:

( elemento, elemento, .... )

Vettore

Un insieme di valori separati da una virgola.

[valore, valore, ....]

Significato

Il valore può essere: un oggetto, un array, un valore letterale (stringa, numero, VERO, falso, nullo).

Non è necessario nient'altro per creare un file JSON!

Esempio di file JSON

Un semplice esempio di struttura del menu. Questo oggetto contiene attributi e una matrice che include altri oggetti della barra dei menu.

( "menu": "File", "comandi": [ ( "title": "Nuovo", "action":"CreateDoc" ), ( "title": "Open", "action": "OpenDoc" ), ("title": "Close", "action": "CloseDoc" ) ] ) Equivalente XML:

File Nuovo</value> <action>Crea documento</action> </item> <item> <title>Aprire</value> <action>opendoc</action> </item> <item> <title>chiudere</value> <action>ChiudiDoc</action> </item> </commands> </root> </p><h3><span>Come utilizzare il formato</span></h3> <p>Il file JSON consente di caricare dati da o su un server. Ad esempio, salvare il contenuto di un modulo appena compilato dall'utente. Il processo comprende tre fasi: elaborazione da parte del browser, elaborazione da parte del server e scambio di dati tra di loro.</p> <h4><span>Lato client (browser)</span></h4> <p>Questa parte è abbastanza semplice, poiché JSON fa parte della definizione JavaScript. Il contenuto di un file oi dati di definizione vengono assegnati alle variabili e diventano oggetti del programma.</p> <h4>Parte server</h4> <p>Il file JSON è utilizzato da vari linguaggi di programmazione, tra cui PHP e Java, per la presenza di parser che consentono di ottenere il contenuto e persino di convertirlo in classi e attributi di linguaggio. Sul sito JSON puoi trovare parser per molti linguaggi di programmazione.</p> <h4>Scambio di dati</h4> <ul><li><span>utilizzando XMLHttpRequest.</span></li> </ul><p>Il file JSON viene analizzato dalla funzione JavaScript <i>valuta()</i>. L'invio di un file al server può essere eseguito utilizzando XMLHttpRequest . Il file viene inviato come file di testo e viene elaborato dal parser del linguaggio di programmazione utilizzato sul server.</p> <h3>Esempio</h3> <p>XMLHttpCodice richiesta:</p><p>varreq = new XMLHttpRequest(); req.open("GET", "file.json", true); req.onreadystatechange = mioCodice; // gestore req.send(null);</p><p>Gestore JavaScript:</p><p>Funzione myCode() ( if (req.readyState == 4) ( var doc = eval("(" + req.responseText + ")"); ) ) Utilizzo dei dati: var menuName = document.getElementById("jsmenu"); // cerca il campo nomemenu.valore = doc.menu.valore; // assegna un valore al campo Come ottenere i dati: doc.commands.title // leggi il valore del campo "titolo" nell'array doc.commands.action // leggi il valore del campo "azione" nell'array Vettore</p> <p><i>Una lezione che esamina cos'è JSON e quali vantaggi ha rispetto ad altri formati di dati.</i></p> <h2>Capire JSON</h2> <p>JSON (JavaScript Object Notation) è un formato di testo per rappresentare i dati nella notazione dell'oggetto JavaScript.</p> <p>Ciò significa che i dati in JSON sono organizzati allo stesso modo di un oggetto JavaScript. Ma a differenza di quest'ultimo, il formato di registrazione JSON ha alcune caratteristiche che verranno discusse poco dopo.</p> <p>JSON viene solitamente utilizzato insieme ad AJAX in modo che il server possa passare i dati in una forma conveniente a uno script JavaScript, che li visualizzerà quindi sulla pagina.</p> <h2>Struttura del formato JSON</h2> <p>Coloro che hanno familiarità con il processo di creazione di oggetti in JavaScript non vedranno nulla di nuovo nella struttura del formato JSON. Questo perché la struttura JSON corrisponde alla struttura dell'oggetto JavaScript con alcune restrizioni.</p> <p>È più facile pensare a JSON come a un contenitore di elementi. Ogni elemento in un tale contenitore è una qualche unità strutturale costituita da una chiave e da un valore.</p> <p><img src='https://i2.wp.com/itchief.ru/assets/images/tickets/2015.12/javascript-structure-json.png' align="center" width="100%" loading=lazy loading=lazy></p> <p>In questo caso, il valore è direttamente correlato alla chiave e forma la cosiddetta coppia chiave-valore. Per ottenere un valore in un tale oggetto, è necessario conoscerne la chiave. Sintatticamente, tali dati in JSON sono scritti come segue:</p> <p><img src='https://i2.wp.com/itchief.ru/assets/images/tickets/2015.12/javascript-json-syntax-data.png' align="center" width="100%" loading=lazy loading=lazy></p> <p>Nella voce precedente, puoi vedere che la chiave è separata dal valore con due punti (:). In questo caso, la chiave nell'oggetto JSON deve essere racchiusa tra virgolette. Questa è la prima caratteristica di JSON che lo distingue da un oggetto JavaScript. Perché in un oggetto JavaScript, non è necessario che la chiave (proprietà dell'oggetto) sia racchiusa tra virgolette.</p> <p><i> </i> Ad esempio, una struttura di oggetti valida da una prospettiva JavaScript ma non valida da una prospettiva JSON:</p><p>Var persona = ( nome: "John"; ) // Oggetto JavaScript</p><p>Attenzione: cerca di impostare il nome della chiave in modo da non complicare l'accesso ai dati, ad es. quando si compone un nome, è preferibile utilizzare la notazione maiuscola cammello o utilizzare un trattino basso ("_") per collegare le parole.</p> <p>Il valore della chiave in JSON può essere scritto in uno dei seguenti formati: stringa (stringa), numero (numero), oggetto (oggetto), array (array), booleano (valore booleano vero o falso), null (valore speciale JavaScript) .</p> <p>Questo è <b>seconda limitazione in JSON, perché un oggetto JavaScript può contenere qualsiasi tipo di dati, inclusa una funzione</b>.</p><p>Var person = ( "name" : "John"; "setName": function() ( console.log(this.name); ) ) // Oggetto JavaScript</p><p>Una virgola (,) viene utilizzata per separare un elemento (coppia chiave-valore) da un altro.</p> <p>Ad esempio, considera un JSON composto da vari tipi di dati.</p> <p><img src='https://i0.wp.com/itchief.ru/assets/images/tickets/2015.12/javascript-json-types-data.png' align="center" height="682" width="543" loading=lazy loading=lazy></p> <p> <i> </i> Attenzione: il formato di rappresentazione dei dati JSON non consente l'utilizzo di commenti all'interno della sua struttura.</p> <h2>Lavorare con JSON in JavaScript</h2> <p>A differenza di un oggetto JavaScript, JSON è una stringa.</p> <p>Per esempio:</p><p>// ad esempio, la variabile personData contiene una stringa che è JSON var personData = "("name":"Ivan","age":37,"mother":("name":"Olga","age": 58),"figli":["Masha","Igor","Tanya"],"sposato": vero,"cane": nullo)";</p><p>L'utilizzo di JSON viene generalmente eseguito in due direzioni:</p> <ol><li>L'analisi è la traduzione di una stringa contenente JSON in un oggetto JavaScript.</li> <li>Conversione di un oggetto JavaScript in una stringa JSON. In altre parole, questa azione fa il contrario dell'analisi.</li> </ol><h3>Analisi JSON</h3> <p>Analisi JSON, ad es. la traduzione di una stringa JSON in un oggetto JavaScript viene eseguita utilizzando il metodo eval() o parse().</p> <p>Usando il metodo eval():</p><p>// la variabile persona è un oggetto JavaScript ottenuto eseguendo il codice JSON (stringa) var person= eval("("+personData+")");</p> <p>Utilizzando il metodo JSON.parse():</p><p>// la variabile persona è un oggetto JavaScript ottenuto analizzando una stringa JSON var person = JSON.parse(personData);</p><h3>Conversione di un oggetto JavaScript in una stringa JSON</h3> <p>La traduzione di un oggetto JavaScript in una stringa JSON viene eseguita utilizzando il metodo JSON.stringify(). Questo metodo fa l'opposto del metodo JSON.parse().</p><p>Var personString = JSON.strigify(persona);</p><h2>Vantaggi del formato JSON</h2> <p>Il formato di rappresentazione dei dati JSON presenta i seguenti vantaggi:</p> <ul><li>metodi convenienti e veloci per convertire (analisi) una stringa JSON in un oggetto JavaScript e viceversa;</li> <li>struttura dei dati chiara e semplice;</li> <li>dimensioni molto ridotte rispetto ad altri formati di dati (es. XML). Questo perché il formato JSON contiene la formattazione minima possibile, ad es. durante la scrittura vengono utilizzati solo pochi caratteri speciali. Questo è un vantaggio molto importante, perché i dati presentati in formato JSON verranno caricati più velocemente che se fossero presentati in altri formati.</li> </ul><p>A causa del fatto che questo formato ha molti vantaggi, è stato utilizzato non solo in JavaScript, ma anche in molti altri linguaggi, come C, Ruby, Perl, Python, PHP, ecc.</p> <h3>Confronto dei formati JSON e XML</h3><p>Il formato JSON presenta i seguenti vantaggi rispetto al formato XML:</p> <ol><li>Quando si passano alcuni dati, la dimensione JSON sarà notevolmente inferiore alla dimensione XML.</li> <li>JSON ha metodi più convenienti per la conversione in strutture di dati JavaScript rispetto a XML.</li> <li>JSON è più facile da creare rispetto a XML.</li> </ol><p><img src='https://i1.wp.com/itchief.ru/assets/images/tickets/2015.12/json-vs-xml.png' align="center" width="100%" loading=lazy loading=lazy></p> <p>L'utilizzo dei dati JSON dopo l'analisi viene eseguito come con un oggetto JavaScript.</p><p>//JSON var personData = "("name":"Ivan","age":37,"mother":("name":"Olga","age":58),"children":["Masha" ,"Igor","Tanya"],"sposato": vero,"cane": nullo)"; //JavaScript oggetto persona var persona = JSON.parse(personData);</p><p>Considera i punti principali:</p><p>//ottengo i valori della chiave (proprietà) name person.name; persona["nome"]; //ottengo i valori della chiave (proprietà) name, che si trova nell'oggetto madre person.mother.name; //elimina elemento età delete(person.age) //aggiungi (o aggiorna) chiave (proprietà) person.eye = "marrone"; //quando si lavora con gli array, è necessario utilizzare metodi progettati per funzionare in modo specifico con gli array //rimuovere 1 elemento dall'array (metodo di giunzione) person.children.splice(1,1) //aggiungere un elemento all'array (metodo push ) persona.bambini.push("Kate");</p><p><img src='https://i0.wp.com/itchief.ru/assets/images/tickets/2015.12/javascript-woks-with-json-after-parsing.png' align="center" width="100%" loading=lazy loading=lazy></p> <p>Per scorrere gli elementi in un oggetto, puoi usare un ciclo for..in:</p><p>For (chiave di persona) ( if (person.hasOwnProperty(key)) ( //key = key //value = person console.log("Key = " + key); console.log("Value = " + person) ; ) // se l'oggetto persona ha una chiave (se la persona ha una proprietà chiave) ) ​​// itera su tutte le chiavi (proprietà) nell'oggetto</p><p><img src='https://i0.wp.com/itchief.ru/assets/images/tickets/2015.12/javascript-for-in-object.png' align="center" height="173" width="371" loading=lazy loading=lazy></p> <p>È possibile utilizzare il seguente ciclo per scorrere gli elementi di un array:</p><p>Per (var i=0; i</p><p><img src='https://i0.wp.com/itchief.ru/assets/images/tickets/2015.12/javascript-for-in-array.png' align="center" height="115" width="253" loading=lazy loading=lazy></p> <script>document.write("<img style='display:none;' src='//counter.yadro.ru/hit;artfast_after?t44.1;r"+ escape(document.referrer)+((typeof(screen)=="undefined")?"": ";s"+screen.width+"*"+screen.height+"*"+(screen.colorDepth? screen.colorDepth:screen.pixelDepth))+";u"+escape(document.URL)+";h"+escape(document.title.substring(0,150))+ ";"+Math.random()+ "border='0' width='1' height='1' loading=lazy loading=lazy>");</script> </div> <div class="post-social-counters-block"> <div style="margin-top: 12px"> <noindex></noindex> </div> </div> </div> </div> <a name="comments"></a> <h3 class="best-theme-posts-title">Articoli correlati in alto</h3> <div class="container-fluid"> <div class="best-theme-posts row"> <div class="theme-post col-sm-4"> <a href="https://bumotors.ru/it/kak-naiti-telefon-na-android-esli-on-poteryalsya-ili-ukraden-kak-vernut.html"> <div class="img_container"><img src="/uploads/d3d163306febb9f32f0020a33c8b9cdb.jpg" border="0" alt="Come restituire uno smartphone smarrito o rubato Come ritrovare un telefono smarrito rubato" width="320" height="180" / loading=lazy loading=lazy></div> <span class="theme-post-link">Come restituire uno smartphone smarrito o rubato Come ritrovare un telefono smarrito rubato</span> </a> </div> <div class="theme-post col-sm-4"> <a href="https://bumotors.ru/it/skolko-idet-zakaznoe-pismo-po-skolko-idet-posylka-s.html"> <div class="img_container"><img src="/uploads/29a4c0919028ff27bfa8cdfefa001987.jpg" border="0" alt="Quanto costa un pacco con Aliexpress?" width="320" height="180" / loading=lazy loading=lazy></div> <span class="theme-post-link">Quanto costa un pacco con Aliexpress?</span> </a> </div> <div class="theme-post col-sm-4"> <a href="https://bumotors.ru/it/kogda-izobreli-lampochku-v-kakom-veke-kto-pervym-pridumal.html"> <div class="img_container"><img src="/uploads/c5927ebfb088c080c6632cfc7c7bf5de.jpg" border="0" alt="Chi per primo ha inventato la lampadina a incandescenza" width="320" height="180" / loading=lazy loading=lazy></div> <span class="theme-post-link">Chi per primo ha inventato la lampadina a incandescenza</span> </a> </div> </div> </div> </div> <a name="comments"></a> </div> <div class="right-column col-sm-4 col-md-4"> <div class="write"> <span class="tags-title">Categorie:</span> <ul style="height: 286px;" id="right-tags" data-tagscount="18" data-currentmaxtag="10" class="tags"> <li class=""><a href="https://bumotors.ru/it/category/programs/">Programmi</a></li> <li class=""><a href="https://bumotors.ru/it/category/safety/">Sicurezza</a></li> <li class=""><a href="https://bumotors.ru/it/category/windows-10/">Windows 10</a></li> <li class=""><a href="https://bumotors.ru/it/category/iron/">Ferro da stiro</a></li> <li class=""><a href="https://bumotors.ru/it/category/windows-8/">Windows 8</a></li> <li class=""><a href="https://bumotors.ru/it/category/vkontakte/">In contatto con</a></li> <li class=""><a href="https://bumotors.ru/it/category/errors/">Errori</a></li> </ul> </div> <div class="banner"> </div> </div> </div> </div> <div style="clear:both"></div> </div> <div class="footer"> <div class="subscribe"> <div class="main-wrapper container"> <div class="row"> <div class="col-sm-8"> </div> <div class="col-sm-4"> <div class="social"> <a href="https://vk.com/share.php?url=https://bumotors.ru/chto-takoe-json-format-json-primer-i-opisanie.html" class="vk social-ico"></a> <a href="https://www.facebook.com/sharer/sharer.php?u=https://bumotors.ru/chto-takoe-json-format-json-primer-i-opisanie.html" class="fb social-ico"></a> <a href="https://www.twitter.com/share?url=https%3A%2F%2Fbumotors.ru%2Fit%2Fchto-takoe-json-format-json-primer-i-opisanie.html" class="tw social-ico"></a> </div> </div> </div> </div> </div> <div class="info"> <div class="main-wrapper container"> <div class="row"> <span class="footer-info col-xs-12">© 2022 bumotors.ru. Come configurare smartphone e PC. Portale informativo.</span> </div> </div> </div> </div> </body> </html>