Analyseur/ générateur JSON vers / depuis les structures de données Clojure.
Objectifs clés:
- Conforme aux spécifications JSON selon https://json.org/
- Aucune dépendance externe
Versions et Informations sur les dépendances
Ce projet suit le schéma de version MAJEUR.MINEUR.PATCH où chaque composant fournit une indication relative de la taille du changement, mais ne suit pas le contrôle de version sémantique. En général, tous les changements s’efforcent d’être incessants (en passant à de nouveaux noms plutôt qu’en cassant des noms existants).
La dernière version stable est 2.0.1
CLI/deps.edn
informations de dépendance:
org.clojure/data.json {:mvn/version "2.0.1"}
Informations sur les dépendances de Leiningen:
Informations sur les dépendances Maven:
<dependency> <groupId>org.clojure</groupId> <artifactId>data.json</artifactId> <version>2.0.1</version></dependency>
Autres versions:
-
Toutes Les Versions Publiées
-
Instantanés de Développement
-
Référentiels d’Instantanés de Développement
Utilisation
Documentation de l’API
Exemple d’utilisation:
(ns example (:require ))
Pour convertir en/à partir de chaînes JSON, utilisez json/write-str
et 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}
Notez que ces opérations ne sont pas symétriques: la conversion des données Clojure en JSON est avec perte.
Conversion des types de clés/valeurs
Vous pouvez spécifier un :key-fn
pour convertir les clés de carte à l’entrée ou à la sortie:
(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}
Vous pouvez spécifier un :value-fn
pour convertir les valeurs de carte en cours de route dans orout. La valeur -fn sera appelée avec deux arguments, la clé et la valeur, et elle renvoie la valeur mise à jour.
(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"}
Sachez que :value-fn
ne fonctionne que sur des cartes (objets JSON). Si votre structure de données root est, par exemple, un vecteur de dates, vous devrez la prétraiter ou la post-traiter en dehors des données.json. clojure.marcher peut êtreutile pour cela.
Ordre de la clé-fn / valeur-fn
Si vous spécifiez à la fois a :key-fn
et a :value-fn
lors de la lecture, la valeur-fn est appelée après le traitement de la clé par la clé-fn.
L’inverse est vrai lors de l’écriture:
(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\"}"
Lecture / Écriture d’un flux
Vous pouvez également lire JSON directement à partir d’un java.io.Reader avec json/read
et écrire JSON directement dans un java.io.Writer avec json/write
.
Plus
D’autres options sont disponibles. Reportez-vous à la documentation de l’API pour plus de détails.
Informations pour les développeurs
- Projet GitHub
- Comment contribuer
- Suivi des bogues
- Intégration continue
- Matrice de test de compatibilité
Journal des modifications
- Release 2.0.1 le 2021-Mar-19
- Fix DJSON-37: Correction d’une erreur de lecture de chaînes longues, régression dans 2.0.0
- Version 2.0.0 le 19 mars 2021
- Perf DJSON-35: Remplacez PrintWriter par un appendice plus générique, réduisez l’encapsulation
- Perf DJSON-34: Écriture plus efficace pour le chemin commun
- Perf DJSON-32: Utilisez la carte des options au lieu des variables dynamiques (affecte la lecture + l’écriture)
- Perf DJSON-33: Améliorez la vitesse de lecture des chaînes JSON
- Fix DJSON-30: Correction d’un mauvais test
- Release 1.1.0 on 2021-Mar-5
- Fix DJSON-26: write-object doit vérifier seq sur loop var, pas param
- Utiliser le dernier pom parent (va bump default clojure dep à 1.8.0)
- Utiliser la liaison directe sur le classificateur « aot » lib
- Version 1.0.0 le 18 février 2020
- Version 0.2.7 le 18 novembre 2019
- Correction de DJSON-29: exception de levée sur les entrées d’objets manquantes (virgules supplémentaires)
- Release 0.2.6 on 2015-Mar-6
- Modifier la construction pour produire un paquet AOT avec le classificateur « aot »
- Release 0.2.5 on 2014-Jun-13
- Fix DJSON-17: exception de levée sur des valeurs de points flottants Infinies ou NaN. Un ancien comportement pourrait produire un JSON invalide.
- Version 0.2.4 sur 2014-Jan-10
- Petit changement de comportement:
clojure.data.json/pprint
ajoute maintenant une nouvelle ligne après sa sortie, tout commeclojure.core/pprint
- Fix DJSON-13: sortie flush après pprint
- Fix DJSON-14: gérer EOF à l’intérieur de l’échappement des caractères
- Fix DJSON-15: mauvaise syntaxe dans le test
- Petit changement de comportement:
- Release 0.2.3 on 2013-Aug-30
- Amélioration DJSON-9: option pour échapper U+2028 et U+2029
- Fix DJSON-11: impression de virgules inutiles avec value-fn
- Version 0.2.2 le 2013-Apr-07
- Fix DJSON-7: virgules supplémentaires lors de la suppression des paires clé / valeur)
- Correction de DJSON-8: flux de sortie incorrect dans
write-json
- La version 0.2.1 du 26 octobre 2012
- Rétablit la compatibilité ascendante avec la version 0.1.x versions. Les plus anciens0.1.les API x sont marquées comme obsolètes dans leur documentation. Ils seront supprimés dans une prochaine version.
- Release 0.2.0 on 2012-Oct-12
- Non recommandé pour une utilisation: cette version a introduit des modifications de rupture (renommage des fonctions principales) sans aucun chemin pour la compatibilité avec backwards. Applications avec dépendances transitivessur les deux 0.2.x et 0.1.les API x ne peuvent pas utiliser cette version.
- Nouveau: key-fn et:value-fn permettent une transformation flexible des valeurs lors de la lecture & écriture JSON
- Prise en charge de la lecture de grands entiers en tant que BigInt
- Prise en charge facultative de la lecture de décimales en tant que BigDecimal
- Amélioration des performances
- Release 0.1.3 on 2012-Mar-09
- Correction de l’écriture de chaînes contenant des caractères en dehors du BMP
- Release 0.1.2 on 2011-Oct-14
- Meilleure analyse des échappements de caractères hexadécimaux
- Correction du bogue de gestion EOF
- Correction de DJSON-1: avertissements de réflexion
- Release 0.1.1 on 2011-Juil-01
- Assurez-vous que l’impression vers
*out*
utilise toujours un imprimeur.
- Assurez-vous que l’impression vers
- Version 0.1.0 le 18 mars 2011
- Version initiale.
- Source – compatible avec clojure.contrib.json, à l’exception du changement de nom.
Droits d’auteur et licence
Droits d’auteur (c) Stuart Sierra, Rich Hickey et contribuos 2012-2020.Tous droits réservés. Les conditions d’utilisation et de distribution de ce logiciel sont couvertes par la licence publique Eclipse 1.0 (https://opensource.org/licenses/eclipse-1.0.php) qui peut être trouvé dans le fichier epl-v10.html à la racine de ceci distribution.By en utilisant ce logiciel de quelque manière que ce soit, vous acceptez d’être lié par les termes de cette licence. Vous ne devez pas supprimer cet avis, ni aucun autre, de ce logiciel.