JSON parser/generator till/från Clojure datastrukturer.
viktiga mål:
- kompatibel med JSON spec per https://json.org/
- inga externa beroenden
utgåvor och beroendeinformation
detta projekt följer versionsschemat MAJOR.MINDRE.PATCH där varje komponent ger någon relativ indikation på storleken på ändringen, men följer inte Semantisk versionshantering. I allmänhet strävar alla förändringar efter att vara icke-brytande (genom att flytta till nya namn snarare än genom att bryta befintliga namn).
senaste stabila utgåvan är 2.0.1
CLI / deps.edn
beroendeinformation:
org.clojure/data.json {:mvn/version "2.0.1"}
Leiningen dependency information:
Maven dependency information:
<dependency> <groupId>org.clojure</groupId> <artifactId>data.json</artifactId> <version>2.0.1</version></dependency>
andra versioner:
-
alla släppta versioner
-
utveckling Snapshots
-
utveckling Snapshot Repositories
användning
API-dokumentation
Exempelanvändning:
(ns example (:require ))
för att konvertera till / från JSON-strängar, använd json/write-str
och 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}
Observera att dessa operationer inte är symmetriska: konvertering av Clojure datainto JSON är förstörande.
konvertera Nyckel / värdetyper
du kan ange en :key-fn
för att konvertera kartnycklar på väg in eller ut:
(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 ange en :value-fn
för att konvertera kartvärden på vägen i orout. Värdet-fn kommer att anropas med två argument, nyckeln och thevalue, och det returnerar det uppdaterade värdet.
(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"}
var medveten om att :value-fn
bara fungerar på kartor (JSON-objekt). Om dinrootdatastruktur är till exempel en vektor av datum, behöver duför – eller efterbehandla den utanför data.json. clojure.promenad kan varaanvändbart för detta.
ordning på nyckel-fn / värde-fn
om du anger både en :key-fn
och en :value-fn
vid läsning anropas värdet-fn efter att nyckeln har bearbetats av Key-fn.
det omvända är sant 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äsa / skriva en ström
du kan också läsa JSON direkt från en java.Io.Reader med json/read
och skriva JSON direkt till en java.Io.Writer med json/write
.
mer
andra alternativ är tillgängliga. Se API-dokumentationen för mer information.
utvecklarinformation
- GitHub-projekt
- hur man bidrar med
- Bug Tracker
- kontinuerlig Integration
- Kompatibilitetstestmatris
Ändra logg
- släpp 2.0.1 på 2021-Mar-19
- Fix Djson-37: fix off-by-one-fel att läsa långa strängar, regression i 2.0.0
- släpp 2.0.0 på 2021-Mar-19
- perf DJSON-35: Ersätt PrintWriter med mer generiska bilagor, minska omslaget
- Perf DJSON-34: effektivare skrivning för gemensam väg
- Perf DJSON-32: använd alternativkarta istället för dynamiska variabler (påverkar läs+skriv)
- Perf DJSON-33: förbättra hastigheten på läsning JSON strängar
- Fix DJSON-30: Fix dåligt test
- släpp 1.1.0 på 2021-Mar-5
- Fix DJSON-26: write-object bör kontrollera seq på loop var, inte param
- Använd senaste förälder pom (kommer att stöta standard clojure dep till 1.8.0)
- använd direktlänkning på ” AOT ” klassificerare lib
- släpp 1.0.0 på 2020-Feb-18
- släpp 0.2.7 på 2019-Nov-18
- Fix DJSON-29: kasta undantag på saknade objekt poster (extra kommatecken)
- släpp 0.2.6 på 2015-Mar-6
- ändra build för att producera ett AOT-paket med klassificerare ”aot”
- släpp 0.2.5 på 2014-Jun-13
- Fix DJSON-17: kasta undantag på oändliga eller nan flytpunktvärden. Gammalt beteende kan producera ogiltig JSON.
- släpp 0.2.4 på 2014-Jan-10
- liten förändring i beteende:
clojure.data.json/pprint
lägger nu anewline efter dess utgång precis somclojure.core/pprint
- Fix DJSON-13: flush utgång efter pprint
- Fix DJSON-14: handtag EOF inuti tecken escape
- Fix DJSON-15: dålig syntax i test
- liten förändring i beteende:
- släpp 0.2.3 på 2013-Aug-30
- förbättring DJSON-9: möjlighet att fly U+2028 och U+2029
- Fix DJSON-11: skriva ut onödiga kommatecken med värde-fn
- släpp 0.2.2 på 2013-Apr-07
- Fix DJSON-7: extra kommatecken när du tar bort nyckel / värdepar)
- Fix DJSON-8: fel Utgångsström i
write-json
- släpp 0.2.1 på 2012-Oct-26
- återställer bakåtkompatibilitet med 0.1.X släpper. Den äldre0. 1.X API: er är markerade som föråldrade i sin dokumentation. De kommer att tas bort i en framtida release.
- Release 0.2.0 på 2012-Oct-12
- rekommenderas inte för användning: den här versionen infördes bryta APIchanges (döpa kärnfunktioner) utan någon väg forbackwards-kompatibilitet. Applikationer med transitiva beroendepå både 0.2.x och 0.1.X API: er Kan inte använda den här versionen.
- nytt :key-fn och: value-fn tillåter flexibel transformationof värden vid läsning & skriva JSON
- stöd för att läsa stora heltal som BigInt
- valfritt stöd för att läsa decimaler som BigDecimal
- prestandaförbättringar
- släpp 0.1.3 på 2012-Mar-09
- fixa skrivsträngar som innehåller tecken utanför BMP
- släpp 0.1.2 på 2011-Oct-14
- bättre tolkning av hexadecimala tecken flyr
- Fix EOF-hantering bugg
- Fix DJSON-1: reflektion varningar
- Release 0.1.1 på 2011-Jul-01
- se till att utskrift till
*out*
alltid använder en PrintWriter.
- se till att utskrift till
- släpp 0.1.0 på 2011-Mar-18
- första utgåvan.
- källa-kompatibel med clojure.contrib.json, förutom namnbytet.
upphovsrätt och licens
upphovsrätt (c) Stuart Sierra, Rich Hickey, och contriburos 2012-2020.Alla rättigheter förbehållna. Villkoren för användning och distribution av denna programvara omfattas av Eclipse PublicLicense 1.0 (https://opensource.org/licenses/eclipse-1.0.php) som kanfinns i filen epl-v10.html i roten till detta distribution.By genom att använda denna programvara på något sätt godkänner du att vara bunden av villkoren i denna licens. Du får inte ta bort detta meddelande, eller någon annan, från denna programvara.