parser/generator JSON do/Z struktur danych Clojure.
najważniejsze cele:
- zgodny ze specyfikacją JSON dla https://json.org/
- brak zewnętrznych zależności
Wydania i informacje o zależnościach
ten projekt jest zgodny z głównym schematem wersji.Drobne.PATCH, w którym każdy komponent zapewnia względne wskazanie rozmiaru zmiany, ale nie podąża za wersjonowaniem semantycznym. Ogólnie rzecz biorąc, wszystkie zmiany starają się nie łamać (przenosząc się na nowe nazwy, a nie łamiąc istniejące nazwy).
najnowsza stabilna wersja to 2.0.1
CLI/deps.edn
informacje o zależnościach:
org.clojure/data.json {:mvn/version "2.0.1"}
informacje o zależności Leiningen:
Maven informacje o zależności:
<dependency> <groupId>org.clojure</groupId> <artifactId>data.json</artifactId> <version>2.0.1</version></dependency>
inne wersje:
-
wszystkie wydane wersje
-
migawki rozwoju
-
repozytoria migawek programistycznych
użycie
Dokumentacja API
przykładowe użycie:
(ns example (:require ))
aby przekonwertować na / z ciągów JSON, użyj json/write-str
i 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}
zauważ, że te operacje nie są symetryczne: konwersja Clojure datainto JSON jest stratna.
Konwersja typów kluczy / wartości
możesz określić :key-fn
, aby przekonwertować klucze mapy podczas wchodzenia lub wychodzenia:
(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}
możesz określić :value-fn
, aby przekonwertować wartości mapy po drodze w orout. Wartość-fn zostanie wywołana z dwoma argumentami: key i thevalue i zwraca zaktualizowaną wartość.
(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"}
należy pamiętać, że :value-fn
działa tylko na mapach (obiekty JSON). Jeśli twoja struktura danych jest na przykład wektorem dat, będziesz musiał ją przed lub po przetworzeniu poza danymi.json. clojure.spacer może być przydatny do tego.
kolejność key-fn / value-FN
jeśli podczas odczytu określisz zarówno :key-fn
, jak i :value-fn
, wartość-FN zostanie wywołana po przetworzeniu klucza przez klucz-fn.
odwrotność jest prawdziwa podczas pisania:
(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\"}"
Odczyt / Zapis strumienia
możesz również odczytać JSON bezpośrednio z java.io. Reader z json/read
i zapisać JSON bezpośrednio do Java.io.Writer z json/write
.
więcej
dostępne są inne opcje. Szczegółowe informacje można znaleźć w dokumentacji API.
informacje o programistach
- projekt GitHub
- jak przyczynić się
- śledzenie błędów
- ciągła Integracja
- Matryca testu zgodności
Dziennik zmian
- wydanie 2.0.1 na 2021-Mar-19
- fix Djson-37: Napraw błąd off-by-one czytanie długich ciągów, regresja w 2.0.0
- Wersja 2.0.0 na 2021-Mar-19
- Perf DJSON-35: Wymień drukarkę na bardziej ogólną przydatną, zmniejsz zawijanie
- Perf DJSON-34: bardziej wydajne pisanie dla wspólnej ścieżki
- Perf DJSON-32: użyj opcji Mapa zamiast zmiennych dynamicznych (wpływa na odczyt+zapis)
- Perf DJSON-33: popraw szybkość czytania ciągów JSON
- Fix DJSON-30: napraw zły test
- Wydanie 1.1.0 na 2021-Mar-5
- Fix DJSON-26: write-object powinien sprawdzać seq na pętli var, a nie param
- użyj najnowszego rodzica pom (spowoduje podniesienie domyślnego clojure dep do 1.8.0)
- użyj bezpośredniego linkowania na lib klasyfikatora „aot”
- Wersja 1.0.0 na 2020-Luty-18
- Wersja 0.2.7 na 2019-listopad-18
- Fix DJSON-29: rzuć wyjątek na brakujące wpisy obiektów (dodatkowe przecinki)
- Wydanie 0.2.6 na 2015-Mar-6
- zmodyfikuj build, aby stworzyć pakiet AOT z klasyfikatorem „AOT”
- Wersja 0.2.5 na 2014-Jun-13
- Fix DJSON-17: rzuć wyjątek na nieskończone lub Nan pływające wartości punktów. Stare zachowanie może spowodować nieprawidłowy JSON.
- Wydanie 0.2.4 na 2014-Jan-10
- mała zmiana zachowania:
clojure.data.json/pprint
teraz dodaje nową linię po wyjściu, tak jakclojure.core/pprint
- Fix DJSON-13: wyjście flush po pprint
- Fix DJSON-14: uchwyt EOF wewnątrz znaku ucieczki
- Fix DJSON-15: zła składnia w teście
- mała zmiana zachowania:
- Wydanie 0.2.3 na 2013-Sierpień-30
- wzmocnienie DJSON-9: opcja ucieczki U+2028 i U+2029
- Fix DJSON-11: drukowanie niepotrzebnych przecinków z wartością-fn
- Wersja 0.2.2 na 2013-kwiecień-07
- Fix DJSON-7: dodatkowe przecinki podczas usuwania par klucz / wartość)
- Fix DJSON-8: zły strumień wyjściowy w
write-json
- Wersja 0.2.1 na 2012-Oct-26
- przywraca wsteczną zgodność z 0.1.x releases. Older0.1.X API są oznaczone jako przestarzałe w ich dokumentacji. Zostaną usunięte w przyszłym wydaniu.
- Release 0.2.0 on 2012-Oct-12
- nie zaleca się stosowania: to wydanie wprowadziło łamanie APIchanges (zmiana nazwy podstawowych funkcji) bez żadnej ścieżki forbackwards-compatibility. Aplikacje z przejściowymi zależnościami zarówno od 0.2.x i 0.1.X API nie mogą korzystać z tej wersji.
- Nowość: key-fn i :value-FN umożliwiają elastyczną transformację wartości podczas odczytu & zapis JSON
- Obsługa odczytu dużych liczb całkowitych jako BigInt
- opcjonalna obsługa odczytu dziesiętnych jako BigDecimal
- poprawa wydajności
- Wydanie 0.1.3 na 2012-Mar-09
- Fix pisanie ciągów zawierających znaki poza BMP
- Wydanie 0.1.2 na 2011-Oct-14
- lepsze parsowanie znaków szesnastkowych
- Fix błąd obsługi EOF
- Fix DJSON-1: Ostrzeżenia refleksyjne
- Wydanie 0.1.1 na 2011-Jul-01
- upewnij się, że drukowanie do
*out*
zawsze używa Drukarki.
- upewnij się, że drukowanie do
- Wydanie 0.1.0 na 2011-Mar-18
- Pierwsze wydanie.
- Source-kompatybilny z clojure.contrib.json, z wyjątkiem zmiany nazwy.
Prawa autorskie i licencja
Prawa autorskie (C) Stuart Sierra, Rich Hickey i contriburos 2012-2020.Wszelkie prawa zastrzeżone. Warunki użytkowania i dystrybucji tego oprogramowania są objęte licencją publiczną Eclipse 1.0 (https://opensource.org/licenses/eclipse-1.0.php), które można znaleźć w pliku epl-v10.html u podstaw tego distribution.By korzystając z tego oprogramowania w jakikolwiek sposób, zgadzasz się na związanie warunkami niniejszej licencji. Nie wolno usuwać tego powiadomienia ani żadnego innego z tego oprogramowania.