per il dibattito in questo post: json-conversion-in-javascriptUn array può essere testo JSON di primo livello?
risposta
Sì, un array è legale come testo JSON di primo livello.
Esistono tre documenti standard che definiscono JSON: RFC 4627, RFC 7159 (che obsoletes RFC 4627) e ECMA-404. Si differenziano per gli elementi di livello superiore che consentono, ma consentono tutti un oggetto o un array come elemento di livello superiore.
- RFC 4627: Oggetto o matrice.
"Un testo JSON è un oggetto o un array serializzato." - RFC 7159: Qualsiasi valore JSON.
"Un testo JSON è un valore serializzato." - ECMA-404: Qualsiasi valore JSON.
"Un testo JSON è una sequenza di token formata da punti di codice Unicode conformi alla grammatica del valore JSON ".
È ancora più facile di così. Metti in '[]' e verrà convalidato. – Sorpigal
@sorpigal true dat – hvgotcodes
Il collegamento è guasto, si prega di aggiornare o rimuovere, questa-quasi-solo-risposta di collegamento. – Anthon
Questo è dalle specifiche ECMAScript.
JSONText : JSONValue JSONValue : JSONNullLiteral JSONBooleanLiteral JSONObject JSONArray JSONString JSONNumber
Questo è un po 'fuorviante, però, perché ECMAScript consente di analizzare stringhe JSON che non sono testi di livello superiore. Secondo la RFC, "Un testo JSON è un oggetto o array serializzato". –
@ Matthew - Strano, mi chiedo come si sente Crockford a riguardo. Come potranno riconciliare le differenze tra RFC e ECMA? – ChaosPandion
Ho appena guardato, e ho scoperto che sono consapevoli della differenza. Da ECMAScript 5, paragrafo 15.12, "La produzione JSONText di livello superiore della grammatica JSON ECMAScript può essere costituita da qualsiasi JSONValue anziché essere limitata ad essere un JSONObject o JSONArray come specificato da RFC 4627." Non so se IETF cambierà la RFC. –
Sì, ma si dovrebbe considerare la radice di un oggetto invece in alcuni scenari, a causa di JSON hijacking. Si tratta di una vulnerabilità legata all'intercettazione delle informazioni basata sull'override del costruttore di array in JavaScript.
impressionante articolo –
Sì, questo è il marchio di garanzia di una grande risposta - non solo dire all'OP ciò che volevano sapere, ma anche ciò che dovevano sapere (ma non si rendevano conto). In realtà, c'è una serie di vulnerabilità associate a JSON che analizza come Javascript, il dirottamento JSON è solo un esempio. – sleske
FWIW, dirottamento JSON [non è un problema per i browser moderni] (http://stackoverflow.com/questions/16289894/is-json-hijacking-still-an-issue-in-modern-browsers). –
C'è un po 'di confusione, visto negli altri commenti. Il tipo di supporto "application/json" consente solo oggetti o array al livello principale per il testo JSON, per JSON RFC. Tuttavia, per un parser qualsiasi valore JSON è accettabile, come mostrato nelle specifiche ECMAScript.
Qualsiasi valore JSON come elemento di livello superiore è accettabile per un parser _ECMAScript_, ma non per un parser _JSON (conforme) _ - importante distinzione. – sleske
Questa è una distinzione interessante, ma non capisco cosa stai dicendo. Qual è la definizione di un "parser JSON" (compatibile) "? – cdunn2001
Bene, un parser JSON è un parser per la grammatica JSON. Mentre JSON sembra simile a Javascript, è una grammatica diversa (molto più semplice). Vedi https://tools.ietf.org/html/rfc7159, che descrive la grammatica JSON. "compliant" significa solo che il parser segue effettivamente la grammatica (che dovrebbe essere qualsiasi parser decente). – sleske
- 1. Controllo di primo livello non può essere aggiunto a un controllo
- 2. Un array può essere troppo grande?
- 3. Perché l'interfaccia può essere dichiarata solo nella classe di primo livello?
- 4. Perché una classe di primo livello non può essere statica in Java?
- 5. Come posso usare $ elemMatch su array di primo livello?
- 6. python JSON ottiene solo le chiavi nel primo livello
- 7. C# DataContractJsonSerializer riesce quando valore può essere un array o un singolo elemento
- 8. Parse un solo livello di JSON
- 9. Scala: l'annotazione implicitNotFound può essere applicata a livello di metodo?
- 10. Come caricare un XIB con un ViewController di primo livello?
- 11. semplificare un array nidificato in un singolo array di livello
- 12. Scrivere un testo JSON
- 13. Numero nel dominio di primo livello?
- 14. Come ottenere solo div di primo livello?
- 15. Testo nascosto che può essere trascinato dal browser?
- 16. Conversione di un array JSON in un array Bash
- 17. Delphi: Accesso JSON oggetti all'interno di un array JSON
- 18. Un riferimento non può essere NULL o può essere NULL?
- 19. Come ottenere il contenitore di primo livello di un JComponent?
- 20. Implode un array senza primo elemento
- 21. Converti json in un array C#?
- 22. analisi di un array Ruby per JSON
- 23. Creazione di un array JSON in C#
- 24. Python ValueError: nessun oggetto JSON può essere decodificato
- 25. Come deserializzare un array JSON utilizzando Newtonsoft.Json
- 26. Come strutturare meglio un array di array in JSON
- 27. Fissare primo elemento, mischiare il resto di un elenco/array
- 28. Dato un array di stringhe, restituisce true se ogni stringa può essere connessa ad altri
- 29. Array Javascript nell'array JSON
- 30. Leggere un array Json in Android
A partire da [questo nuovo RFC] (http://www.ietf.org/rfc/rfc7159.txt), "Un testo JSON è una sequenza di token. Il set di token comprende sei caratteri strutturali, stringhe, numeri e tre nomi letterali. " – antak