Clojureデータ構造との間のJSONパーサー/ジェネレータ。
:
- https://json.org/
- によるJSON仕様に準拠外部依存関係なし
リリースと依存関係情報
このプロジェクトは、バージョンスキームMAJORに従います。マイナー。各コンポーネントは、変更のサイズのいくつかの相対的な指標を提供しますが、セマンティックバージョニングに従っていませんPATCH。 一般に、すべての変更は、(既存の名前を壊すのではなく、新しい名前に移動することによって)中断しないように努力します。
最新の安定版リリースは2.0.1です
CLI/deps.edn
依存関係情報:
org.clojure/data.json {:mvn/version "2.0.1"}
ライニンゲン依存関係情報:
Maven依存関係情報:
<dependency> <groupId>org.clojure</groupId> <artifactId>data.json</artifactId> <version>2.0.1</version></dependency>
その他のバージョン:
-
すべてのリリースされたバージョン
-
開発スナップショット
-
開発スナップショットリポジトリ
使用法
APIドキュメント
使用例:
(ns example (:require ))
JSON文字列との間で変換するには、json/write-str
とjson/write-str
を使用します。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}
これらの操作は対称的ではないことに注意してください。Clojure datainto JSONへの変換は損失があります。
キー/値型の変換
マップキーを途中で変換するには、:key-fn
を指定できます:
(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}
oroutの途中でマップ値を変換するには、:value-fn
を指定できます。 Value-fnは、keyとthevalueの2つの引数で呼び出され、更新された値を返します。
(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"}
:value-fn
はマップ(JSONオブジェクト)でのみ動作することに注意してください。 たとえば、ルートデータ構造が日付のベクトルである場合は、データの外部で事前処理または後処理する必要があります。json。 clojure…歩くことはこのために有用です。
key-fn/value-fnの順序
読み取り時に:key-fn
と:value-fn
の両方を指定すると、key-fnによってキーが処理された後にvalue-fnが呼び出されます。
書き込み時には逆が真です:
(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\"}"
ストリーム
の読み取り/書き込みjson/read
を使用してJAVA.io.Readerから直接JSONを読み取り、json/write
を使用してJAVA.io.Writerに直接JSONを書き込むこともできます。
その他
その他のオプションがあります。 詳細については、APIのドキュメントを参照してください。
開発者情報
- GitHubプロジェクト
- 貢献する方法
- バグトラッカー
- 継続的な統合
- 互換性テストマトリックス
変更ログ
- リリース2.0.1on2021-Mar-19
- djson-37を修正:長い文字列を読み取るオフバイワンエラーを修正しました。2.0.0
- リリース2.0.0on2021-Mar-19
- Perf DJSON-35: PrintWriterをより一般的な追加可能なものに置き換え、ラッピングを減らす
- Perf DJSON-34:共通パスの書き込みをより効率的にする
- Perf DJSON-32:動的変数の代わりにオプショ
- DJSON-26の修正:write-objectは、param
- ではなく、ループvarでseqをチェックする必要があります最新の親pomを使用します(デフォルトのclojure depを1.8にバンプします。0)
- “aot”分類子libで直接リンクを使用する
- Djson-29を修正:欠落しているオブジェクトエントリ(余分なカンマ)に例外をスローします)
- ビルドを変更して、分類子”aot”を持つAOTパッケージを生成します”
- DJSON-17を修正:無限またはNaN浮動小数点値に例外をスローします。 古い動作では無効なJSONが生成される可能性があります。
- 動作の小さな変更:
clojure.data.json/pprint
は、clojure.core/pprint
- のように出力の後にanewlineを追加します。DJSON-13:pprint後の出力をフラッシュする
- DJSON-14:文字エスケープ内のEOFを処理する
- DJSON-15:テス
- 機能強化DJSON-9:U+2028およびU+2029
- をエスケープするオプションDJSON-11:不要なカンマを値-fnで印刷する修正
- DJSON-7を修正しました: キー/値のペアを削除するときの余分なカンマ)
- DJSON-8を修正:間違った出力ストリームで
write-json
- は、0.1との下位互換性を復元します。xリリース。 古い0.1.x Apiは、ドキュメントで非推奨としてマークされています。 彼らは将来のリリースで削除されます。
- 使用は推奨されません:このリリースでは、backwards-compatibilityのパスなしでapichangesを破る(コア関数の名前を変更する)ことが導入されました。 推移的な依存関係を持つアプリケーションは、両方の0.2。xと0。1.x Apiはこのバージョンを使用できません。
- New:key-fnおよび:value-fn&を読み取るときに柔軟な変換値を許可JSONを書く
- 大きな整数をBigIntとして読み取るためのサポート
- オプションの小数点をBigDecimalとして読み取るサポート
- パフォーマンスの改善
- BMP外の文字を含む文字列の書き込みを修正しました
- 十六進文字エスケープのより良い解析
- EOF処理バグを修正
- DJSON-1を修正: 反射警告
*out*
への印刷は常にPrintWriterを使用することを確認してください。
- 初期リリース。
- ソース-clojureと互換性があります。コントリブ名前の変更を除いて、json。
著作権とライセンス
Copyright(c)Stuart Sierra,Rich Hickey,and contributros2012-2020.すべての権利を保有します。 このソフトウェアの使用および配布条件は、Eclipse PublicLicense1によってカバーされています。0(https://opensource.org/licenses/eclipse-1.0.php)これはファイルepl-v10で見つけることができます。これのルートでのhtml distribution.By いかなる方法でもこのソフトウェアを使用すると、あなたはこのライセンスの条件に拘束されることに同意しています。 あなたは、このソフトウェアから、この通知、またはanyotherを削除してはなりません。