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/readoch 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/pprintlä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.