JSON parser/generatore a/da strutture dati Clojure.
Obiettivi chiave:
- Compatibile con le specifiche JSON per https://json.org/
- Nessuna dipendenza esterna
Informazioni sui rilasci e sulle dipendenze
Questo progetto segue lo schema di versione MAJOR.MINORE.PATCH in cui ogni componente fornisce un’indicazione relativa della dimensione della modifica, ma non segue il controllo delle versioni semantico. In generale, tutte le modifiche cercano di essere non-breaking (passando a nuovi nomi piuttosto che rompendo nomi esistenti).
Ultima release stabile è la 2.0.1
CLI/deps.edn
informazioni di dipendenza:
org.clojure/data.json {:mvn/version "2.0.1"}
Leiningen informazioni di dipendenza:
Maven informazioni di dipendenza:
<dependency> <groupId>org.clojure</groupId> <artifactId>data.json</artifactId> <version>2.0.1</version></dependency>
Altre versioni:
-
Tutte le Versioni Rilasciate
-
Snapshot di Sviluppo
-
Snapshot di Sviluppo Repository
Utilizzo
Documentazione delle API
Esempio di utilizzo:
(ns example (:require ))
Per convertire in/da stringhe JSON, utilizzare json/write-str
e json/read-str
:
(json/write-str {:a 1 :b 2});;=> "{\"a\":1,\"b\":2}"(json/read-str "{\"a\":1,\"b\":2}");;=> {"a" 1, "b" 2}
Si noti che queste operazioni non sono simmetriche: la conversione di dati Clojure in JSON è lossy.
Conversione dei tipi chiave / valore
È possibile specificare un :key-fn
per convertire le chiavi della mappa in entrata o in uscita:
(json/read-str "{\"a\":1,\"b\":2}" :key-fn keyword);;=> {:a 1, :b 2}(json/write-str {:a 1 :b 2} :key-fn #(.toUpperCase %));;=> "{\"A\":1,\"B\":2}"(json/read-str "{\"a\":1,\"b\":2}" :key-fn #(keyword "com.example" %));;=> {:com.example/a 1, :com.example/b 2}
È possibile specificare un :value-fn
per convertire i valori della mappa sulla strada in orout. Il valore-fn verrà chiamato con due argomenti, la chiave e il valore, e restituisce il valore aggiornato.
(defn my-value-reader (if (= key :date) (java.sql.Date/valueOf value) value))(json/read-str "{\"number\":42,\"date\":\"2012-06-02\"}" :value-fn my-value-reader :key-fn keyword) ;;=> {:number 42, :date #inst "2012-06-02T04:00:00.000-00:00"}
Tieni presente che :value-fn
funziona solo su maps (oggetti JSON). Se la struttura dei dati yourroot è, ad esempio, un vettore di date, sarà necessario pre – o post-elaborarlo al di fuori dei dati.json. clojure.camminare può essereutile per questo.
Ordine della chiave-fn / valore-fn
Se si specificano sia a :key-fn
che a :value-fn
durante la lettura,il valore-fn viene chiamato dopo che la chiave è stata elaborata dalchiave-fn.
Il contrario è vero quando si scrive:
(defn my-value-writer (if (= key :date) (str (java.sql.Date. (.getTime value))) value))(json/write-str {:number 42, :date (java.util.Date. 112 5 2)} :value-fn my-value-writer :key-fn name) ;;=> "{\"number\":42,\"date\":\"2012-06-02\"}"
Lettura / scrittura di un flusso
Puoi anche leggere JSON direttamente da un java.io.Reader con json/read
e scrivere JSON direttamente su un java.io.Writer con json/write
.
Più
Altre opzioni sono disponibili. Fare riferimento alla documentazione API per i dettagli.
Informazioni per gli Sviluppatori
- progetto GitHub
- Come contribuire
- Bug Tracker
- Continuous Integration
- Test di Compatibilità Matrice
Change Log
- Release 2.0.1 su 2021-Mar-19
- Fix DJSON-37: Fissare off-by-one errore di lettura di lunghe stringhe, regressione in 2.0.0
- Versione 2.0.0 su 2021-Mar-19
- Perf DJSON-35: Sostituire PrintWriter con più generico Appendable, ridurre il wrapping
- Perf DJSON-34: Più efficace di scrittura per il cammino comune
- Perf DJSON-32: Utilizzare l’opzione mappa invece di variabili dinamiche (colpisce lettura+scrittura)
- Perf DJSON-33: Migliorare la velocità di lettura di stringhe JSON
- Fix DJSON-30: Correggere le cattive test
- Versione 1.1.0 su 2021-Mar-5
- Fix DJSON-26: scrivere-oggetto dovrebbe verificare seq sul circuito di var, non param
- Utilizzare l’ultima genitore pom (si imbatterà default clojure dep a 1.8.0)
- Utilizzare i link diretti su “aot” classificazione lib
- Versione 1.0.0 nel 2020-Feb-18
- Versione 0.2.7 nel 2019-Nov-18
- Fix DJSON-29: gettare l’eccezione in oggetto mancante voci (extra virgole)
- Versione 0.2.6 nel 2015-Mar-6
- Modificare costruire per produrre un AOT pacchetto con classificazione “aot”
- Versione 0.2.5 nel 2014-Jun-13
- Fix DJSON-17: gettare l’eccezione Infinito, o NaN floating-pointvalues. Il vecchio comportamento potrebbe produrre JSON non valido.
- Rilascio 0.2.4 2014-Gen-10
- Piccolo cambiamento nel comportamento:
clojure.data.json/pprint
aggiunge ora anewline dopo la sua uscita, proprio comeclojure.core/pprint
- Fix DJSON-13: filo di uscita dopo pprint
- Fix DJSON-14: maniglia EOF all’interno di escape dei caratteri
- Fix DJSON-15: sintassi non valida nel test
- Piccolo cambiamento nel comportamento:
- Versione 0.2.3 2013-Ago-30
- Accessori DJSON-9: opzione per sfuggire U+2028 e U+2029
- Fix DJSON-11: stampa inutili virgole con valore-fn
- Versione 0.2.2 2013-Apr-07
- Fix DJSON-7: virgole extra quando si rimuovono coppie chiave / valore)
- Correggere DJSON-8: flusso di output errato in
write-json
- La versione 0.2.1 del 2012-Oct-26
- Ripristina la retrocompatibilità con 0.1.x rilascia. Il più vecchio0. 1.le API x sono contrassegnate come deprecate nella loro documentazione. Theywill essere rimosso in una versione futura.
- Release 0.2.0 su 2012-Oct-12
- Non raccomandato per l’uso: questa release ha introdotto APIchanges rottura (rinominare funzioni di base) senza alcun percorso forbackwards-compatibilità. Applicazioni con dipendenze transitorieson entrambi i 0.2.x e 0.1.le API x non possono utilizzare questa versione.
- Nuovo :key-fn e :valore-fn permesso flessibile transformationof valori durante la lettura di & scrivere JSON
- il Supporto per la lettura di grandi numeri interi come BigInt
- supporto Opzionale per la lettura di cifre decimali BigDecimal
- miglioramenti delle Prestazioni
- Versione 0.1.3 2012-Mar-09
- Correzione scrittura di stringhe contenenti caratteri al di fuori del BMP
- Versione 0.1.2 2011-Ott-14
- una Migliore analisi di carattere esadecimale sfugge
- Fix EOF-gestione di bug
- Fix DJSON-1: avvertenze di riflessione
- Release 0.1.1 il 2011-Lug-01
- Assicurarsi che la stampa su
*out*
utilizzi sempre un PrintWriter.
- Assicurarsi che la stampa su
- Rilascio 0.1.0 il 2011-Mar-18
- Rilascio iniziale.
- Sorgente-compatibile con clojure.contrib.json, ad eccezione del cambio di nome.
Copyright e licenza
Copyright (c) Stuart Sierra, Rich Hickey e contriburos 2012-2020.Tutti i diritti riservati. I termini di utilizzo e distribuzione di questo software sono coperti dalla licenza pubblica Eclipse 1.0 (https://opensource.org/licenses/eclipse-1.0.php) che puòessere trovato nel file epl-v10.html alla radice di questo distribution.By utilizzando questo software in qualsiasi modo, accetti di essere vincolato dai termini di questa licenza. Non è necessario rimuovere questo avviso, o qualsiasi altro, da questo software.