JSON analyzátor / generátor do / z datových struktur Clojure.
klíčové cíle:
- v souladu s JSON spec na https://json.org/
- žádné externí závislosti
zprávy a informace o závislostech
tento projekt sleduje schéma verze MAJOR.NEZLETILÝ.Oprava, kde každá komponenta poskytuje určitou relativní indikaci velikosti změny, ale nesleduje sémantické verze. Obecně platí, že všechny změny se snaží být neporušující (přechodem na nová jména spíše než porušením stávajících jmen).
nejnovější stabilní verze je 2.0.1
CLI / deps.edn
informace o závislosti:
org.clojure/data.json {:mvn/version "2.0.1"}
informace o závislosti v Leiningenu:
informace o závislosti Maven:
<dependency> <groupId>org.clojure</groupId> <artifactId>data.json</artifactId> <version>2.0.1</version></dependency>
další verze:
-
všechny vydané verze
-
vývojové momentky
-
vývoj Snapshot repozitáře
použití
dokumentace API
příklad použití:
(ns example (:require ))
Chcete-li převést do / z JSON řetězců, použijte json/write-str
a 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}
Všimněte si, že tyto operace nejsou symetrické: převod Clojure datainto JSON je ztrátový.
převod Typů Klíčů / hodnot
můžete zadat :key-fn
pro převod mapových klíčů na cestě dovnitř nebo ven:
(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}
můžete zadat :value-fn
pro převod mapových hodnot na cestě v orout. Hodnota-fn bude volána se dvěma argumenty, klíčem a hodnotou a vrátí aktualizovanou hodnotu.
(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"}
uvědomte si, že :value-fn
funguje pouze na mapách (JSON objekty). Pokud je datová struktura yourroot například vektorem dat, budete ji potřebovat před nebo po zpracování mimo data.json. clojure.chůze může býtužitečné pro toto.
pořadí klíče-fn / value-fn
pokud při čtení zadáte jak :key-fn
, tak :value-fn
, vyvolá se hodnota-fn poté, co byl klíč zpracován klávesou-fn.
opak je při psaní pravdivý:
(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\"}"
čtení / zápis proudu
můžete také číst JSON přímo z java. io. Reader s json/read
a psát JSON přímo do java. io. Writer s json/write
.
více
další možnosti jsou k dispozici. Podrobnosti naleznete v dokumentaci API.
informace pro vývojáře
- GitHub project
- Jak přispět
- Bug Tracker
- kontinuální integrace
- Matrix testu kompatibility
protokol změn
- Release 2.0.1 on 2021-Mar-19
- Fix DJSON-37: Fix off-by-one error reading long řetězce, regrese v 2.0.0
- vydání 2.0.0 na 2021-Mar-19
- Perf DJSON-35: Nahraďte PrintWriter obecnějším dodatkem, snižte balení
- Perf DJSON-34: efektivnější psaní pro společnou cestu
- Perf DJSON-32: použijte volbu mapa místo dynamických proměnných (ovlivňuje čtení+zápis)
- Perf DJSON-33: Zvyšte rychlost čtení řetězců JSON
- Fix DJSON-30: opravte špatný test
- Release 1.1.0 on 2021-Mar-5
- Fix DJSON-26: write-objekt by měl zkontrolovat seq na smyčce var, ne param
- použijte nejnovější Nadřazený pom (narazí výchozí clojure dep na 1.8.0)
- použijte přímé propojení na klasifikátoru “ AOT “ lib
- Release 1.0.0 on 2020-Feb-18
- Release 0.2.7 on 2019-Nov-18
- Fix DJSON-29: hodit výjimku na chybějící položky objektu (extra čárky)
- vydání 0.2.6 na 2015-Mar-6
- upravit sestavení tak, aby produkoval balíček AOT s klasifikátorem „AOT“
- vydání 0.2.5 na 2014-Jun-13
- Fix DJSON-17: hodit výjimku na nekonečné nebo NaN plovoucí pointvalues. Staré chování by mohlo způsobit neplatné JSON.
- Uvolněte 0.2.4 na 2014-Jan-10
- malá změna v chování:
clojure.data.json/pprint
nyní přidává nový řádek po jeho výstupu stejně jakoclojure.core/pprint
- Fix DJSON-13: flush výstup po pprint
- Fix DJSON-14: rukojeť EOF vnitřní útěk znaků
- Fix DJSON-15: špatná syntaxe v testu
- malá změna v chování:
- vydání 0.2.3 na 2013-Aug-30
- Enhancement DJSON-9: možnost uniknout u + 2028 a u + 2029
- Fix DJSON-11: Tisk nepotřebných čárek s hodnotou-fn
- vydání 0.2.2 na 2013-Apr-07
- Fix DJSON-7: extra čárky při odstraňování párů klíčů/hodnot)
- Fix DJSON-8: nesprávný Výstupní proud v
write-json
- vydání 0.2.1 na 2012-Oct-26
- obnovuje zpětnou kompatibilitu s 0.1.x vydání. Starší0, 1.X API jsou ve své dokumentaci označena jako zastaralá. Budou odstraněny v budoucím vydání.
- vydání 0.2.0 na 2012-Oct-12
- nedoporučuje se používat: toto vydání představilo lámání APIchanges (přejmenování základních funkcí) bez jakékoli cesty forbackwards-Kompatibilita. Aplikace s přechodnou závislostína obou 0,2.x a 0.1.X API nelze použít tuto verzi.
- Novinka: key-fn a: value-fn umožňují flexibilní transformaci hodnot při čtení & psaní JSON
- podpora pro čtení velkých celých čísel jako BigInt
- volitelná podpora pro čtení desetinných míst jako BigDecimal
- zlepšení výkonu
- vydání 0.1.3 na 2012-Mar-09
- Fix psaní řetězce obsahující znaky mimo BMP
- vydání 0.1.2 na 2011-Oct-14
- lepší parsování hexadecimálních znaků uniká
- Fix EOF-handling bug
- Fix DJSON-1: varování před odrazem
- vydání 0.1.1 na 2011-červenec-01
- ujistěte se, že tisk na
*out*
vždy používá PrintWriter.
- ujistěte se, že tisk na
- vydání 0.1.0 na 2011-Mar-18
- počáteční vydání.
- zdroj-kompatibilní s clojure.contrib.json, až na změnu jména.
Copyright a licence
Copyright (c) Stuart Sierra, Rich Hickey, and contriburos 2012-2020.Všechna práva vyhrazena. Podmínky použití a distribuce tohoto softwaru jsou pokryty Eclipse PublicLicense 1.0 (https://opensource.org/licenses/eclipse-1.0.php), který můženajít v souboru epl-v10.html v kořenovém adresáři tohoto distribution.By používání tohoto softwaru jakýmkoli způsobem, souhlasíte s tím, že budete vázáni podmínkami této licence. Nesmíte odstranit toto oznámení, nebo jakýkoli jiný, z tohoto softwaru.