JSON parser/generator til/fra Clojure datastrukturer.
centrale mål:
- overholder JSON spec per https://json.org/
- ingen eksterne afhængigheder
udgivelser og Afhængighedsoplysninger
dette projekt følger versionsskemaet MAJOR.MINDRE.PATCH, hvor hver komponent giver en vis relativ indikation af størrelsen på ændringen, men følger ikke semantisk versionering. Generelt bestræber alle ændringer sig på at være ikke-bryde (ved at flytte til nye navne snarere end ved at bryde eksisterende navne).
seneste stabile udgivelse er 2.0.1
CLI / deps.edn
afhængighedsinformation:
org.clojure/data.json {:mvn/version "2.0.1"}
oplysninger om afhængighed af Leiningen:
Maven afhængighed information:
<dependency> <groupId>org.clojure</groupId> <artifactId>data.json</artifactId> <version>2.0.1</version></dependency>
andre versioner:
-
alle udgivne versioner
-
udvikling Snapshots
-
udvikling Snapshot Repositories
anvendelse
API-dokumentation
eksempel brug:
(ns example (:require ))
for at konvertere til / fra JSON-strenge skal du bruge json/write-str
og 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}
Bemærk, at disse operationer ikke er symmetriske: konvertering Clojure dataainto JSON er lossy.
konvertering af nøgle / værdityper
du kan angive en :key-fn
for at konvertere korttaster på vej ind eller ud:
(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}
du kan angive en :value-fn
for at konvertere kortværdier på vej ind i orout. Værdien-fn kaldes med to argumenter, nøglen og værdien, og den returnerer den opdaterede værdi.
(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"}
Vær opmærksom på, at :value-fn
kun virker på kort (JSON objekter). Hvis dinroddatastruktur for eksempel er en vektor af datoer, skal duFor – eller efterbehandle den uden for data.json. clojure.gåtur kan værenyttigt for dette.
rækkefølge af nøgle-fn / value-fn
hvis du angiver både a :key-fn
og a :value-fn
når du læser,kaldes værdien-fn, efter at nøglen er blevet behandlet af thekey-fn.
det omvendte er sandt, når du skriver:
(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\"}"
læsning / skrivning af en Stream
du kan også læse JSON direkte fra en java.io.Reader med json/read
og skrive JSON direkte til en java.io.skribent med json/write
.
mere
andre muligheder er tilgængelige. Se API-dokumentationen for detaljer.
Udviklerinformation
- GitHub project
- sådan bidrager du
- Bug Tracker
- Kontinuerlig Integration
- Kompatibilitetstestmatrice
Skift Log
- release 2.0.1 på 2021-Mar-19
- ret Djson-37: ret off-by-one fejl læsning lange strenge, regression i 2.0.0
- udgivelse 2.0.0 på 2021-Mar-19
- Perf DJSON-35: Udskift Printforfatter med mere generisk Appendable, reducer indpakning
- Perf DJSON-34: mere effektiv skrivning til fælles sti
- Perf DJSON-32: brug valgkort i stedet for dynamiske variabler (påvirker Læs+skriv)
- Perf DJSON-33: forbedre hastigheden ved læsning af JSON-strenge
- ret DJSON-30: ret dårlig test
- slip 1.1.0 den 2021-Mar-5
- ret DJSON-26: skriv-objekt skal kontrollere SEK på loop var, ikke param
- Brug nyeste forælder pom (vil støde standard clojure Dep til 1.8.0)
- brug direkte link på” aot ” klassifikator lib
- slip 1.0.0 den 2020-Feb-18
- slip 0.2.7 den 2019-Nov-18
- ret DJSON-29: kast undtagelse på manglende objektindgange (ekstra kommaer)
- Release 0.2.6 på 2015-Mar-6
- ændre build til at producere en AOT pakke med klassifikator “aot”
- slip 0.2.5 den 2014-Jun-13
- ret DJSON-17: kast undtagelse på Infinite eller NaN floating-point values. Gammel opførsel kunne producere ugyldig JSON.
- slip 0.2.4 på 2014-Jan-10
- lille ændring i adfærd:
clojure.data.json/pprint
tilføjer nu en ny linje efter dens output ligesomclojure.core/pprint
- ret DJSON-13: flush output efter pprint
- ret DJSON-14: håndtag EOF inside character escape
- ret DJSON-15: dårlig syntaks i test
- lille ændring i adfærd:
- slip 0.2.3 den 2013-Aug-30
- Enhancement DJSON-9: mulighed for at undslippe U+2028 og U+2029
- ret DJSON-11: Udskrivning af unødvendige kommaer med værdi-fn
- udgivelse 0.2.2 på 2013-Apr-07
- rette DJSON-7: ekstra kommaer, når du fjerner nøgle / værdipar)
- ret DJSON-8: forkert outputstrøm i
write-json
- udgivelse 0.2.1 på 2012-okt-26
- gendanner bagudkompatibilitet med 0.1.udgivelser. Den ældre0.1.API ‘ er er markeret som forældede i deres dokumentation. De vil blive fjernet i en fremtidig udgivelse.
- udgivelse 0.2.0 den 2012-okt-12
- anbefales ikke til brug: denne udgivelse introducerede breaking APIchanges (omdøbning af kernefunktioner) uden nogen sti bagud-kompatibilitet. Applikationer med transitive afhængighederpå både 0.2.h og 0.1.API ‘ er kan ikke bruge denne version.
- ny: nøgle-fn og: værdi-fn tillader fleksibel transformationaf værdier ved læsning & skrivning JSON
- støtte til læsning af store heltal som BigInt
- valgfri støtte til læsning af decimaler som BigDecimal
- ydelsesforbedringer
- slip 0.1.3 den 2012-Mar-09
- Løs skrivestrenge, der indeholder tegn uden for BMP
- Release 0.1.2 på 2011-okt-14
- bedre parsing af seksadecimal karakter undslipper
- rette EOF-håndtering bug
- rette DJSON-1: refleksionsadvarsler
- Release 0.1.1 on 2011-Jul-01
- sørg for, at udskrivning til
*out*
altid bruger en Printforfatter.
- sørg for, at udskrivning til
- udgivelse 0.1.0 på 2011-Mar-18
- første udgivelse.
- kilde-kompatibel med clojure.bidrag.json, bortset fra navneændringen.
ophavsret og licens
ophavsret (C) Stuart Sierra, Rich Hickey og contriburos 2012-2020.Alle rettigheder forbeholdes. Betingelserne for anvendelse og distribution af dette program er omfattet af Eclipse PublicLicense 1.0 (https://opensource.org/licenses/eclipse-1.0.php) som kanfindes i filen epl-v10.html ved roden af dette distribution.By du accepterer at være bundet af vilkårene i denne licens. Du må ikke fjerne denne meddelelse, eller noget andet, fra dette program.