clojure / data.json

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/pprint lägger nu anewline efter dess utgång precis som clojure.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
  • 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.
  • 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.

Lämna ett svar

Din e-postadress kommer inte publiceras.