Clojure / data.JSON

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/readi 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 jak clojure.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
  • 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.
  • 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.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany.