clojure / data.json

Analizador/generador JSON a / desde estructuras de datos Clojure.

Objetivos clave:

  • Compatible con especificaciones JSON para https://json.org/
  • Sin dependencias externas

Versiones e Información de dependencias

Este proyecto sigue el esquema de versión MAJOR.MENOR.PARCHE en el que cada componente proporciona alguna indicación relativa del tamaño del cambio, pero no sigue el control de versiones semánticas. En general, todos los cambios se esfuerzan por no romperse (moviéndose a nombres nuevos en lugar de romper nombres existentes).

La última versión estable es 2.0.1

CLI / deps.edn información de dependencias:

org.clojure/data.json {:mvn/version "2.0.1"}

Información de dependencia de Leiningen:

Información de dependencia de Maven:

<dependency> <groupId>org.clojure</groupId> <artifactId>data.json</artifactId> <version>2.0.1</version></dependency>

Otras versiones:

  • Todas las Versiones Lanzadas

  • Instantáneas de Desarrollo

  • Repositorios de Instantáneas de Desarrollo

Uso

Documentación de API

Ejemplo de uso:

(ns example (:require ))

Para convertir a / desde cadenas JSON, use json/write-str y 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}

Tenga en cuenta que estas operaciones no son simétricas: convertir datos de Clojure a JSON es con pérdidas.

Conversión de tipos de clave / valor

Puede especificar un :key-fn para convertir claves de mapa en el camino de entrada o salida:

(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}

Puede especificar un :value-fn para convertir valores de mapa en el camino de entrada o salida. El valor-fn se llamará con dos argumentos, la clave y el valor, y devuelve el valor actualizado.

(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"}

Tenga en cuenta que :value-fn solo funciona en mapas (objetos JSON). Si yourroot estructura de datos es, por ejemplo, un vector de fechas, se le necesidad de pre – o post-proceso de datos.json. clojure.caminar puede ser útil para esto.

Orden de la clave-fn / valor-fn

Si especifica a :key-fn y a :value-fn al leer,se llama al valor-fn después de que la clave haya sido procesada por la clave-fn.

ocurre lo contrario cuando la escritura:

(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\"}"

la Lectura/Escritura de una Secuencia

Usted también puede leer JSON directamente desde java.io.Lector con json/ready escribir JSON directamente a un java.io.Escritor con json/write.

Más

Hay otras opciones disponibles. Consulte la Documentación de la API para obtener más información.

Información para desarrolladores

  • Proyecto GitHub
  • Cómo contribuir
  • Rastreador de errores
  • Integración continua
  • Matriz de prueba de compatibilidad

Registro de cambios

  • Release 2.0.1 en 2021-Mar-19
    • Fix DJSON-37: Corrección de errores de lectura de cadenas largas, regresión en 2.0.0
  • Lanzamiento 2.0.0 en 2021-Mar-19
    • Perf DJSON-35: Reemplace PrintWriter por una opción más genérica, reduzca la envoltura
    • Perf DJSON-34: Escritura más eficiente para ruta común
    • Perf DJSON-32: Use el mapa de opciones en lugar de variables dinámicas (afecta a lectura y escritura)
    • Perf DJSON-33: Mejore la velocidad de lectura de cadenas JSON
    • Fix DJSON-30: Fix bad test
  • Versión 1.1.0 en 2021-Mar-5
    • Arreglo DJSON-26: el objeto de escritura debe verificar seq en el var de bucle, no param
    • Use el último pom padre (aumentará el dep de clojure predeterminado a 1.8.0)
    • Usar enlaces directos en la librería clasificadora» aot»
  • Release 1.0.0 on 2020-Feb-18
  • Release 0.2.7 on 2019-Nov-18
    • Fix DJSON-29: lanzar excepción en entradas de objetos faltantes (comas adicionales)
  • Versión 0.2.6 de 2015-Mar-6
    • Modificar compilación para producir un paquete AOT con clasificador «aot»
  • Lanzamiento 0.2.5 en 2014-Jun-13
    • Arreglo DJSON-17: lanzar excepción en valores de punto flotante infinitos o NaN. El comportamiento antiguo podría producir JSON inválido.
  • Lanzamiento 0.2.4 en 2014-Jan-10
    • Pequeño cambio en el comportamiento: clojure.data.json/pprint ahora agrega anewline después de su salida al igual que clojure.core/pprint
    • Fix DJSON-13: salida de descarga después de ppr
    • Fix DJSON-14: manejar EOF dentro del escape de caracteres
    • Fix DJSON-15: sintaxis incorrecta en la prueba
  • Versión 0.2.3 de 2013-Aug-30
    • Mejora DJSON-9: opción para escapar de U+2028 y U+2029
    • Arreglo DJSON-11: impresión de comas innecesarias con valor-fn
  • Versión 0.2.2 de 2013-Apr-07
    • Fix DJSON-7: comas adicionales al eliminar pares clave / valor)
    • Arreglo DJSON-8: flujo de salida incorrectowrite-json
  • La versión 0.2.1 de 2012-Oct-26
    • Restaura la compatibilidad con versiones anteriores de 0.1.x versiones. El anciano 0.1.las API de x están marcadas como obsoletas en su documentación. Se eliminarán en una versión futura.
  • Versión 0.2.0 en 2012-Oct-12
    • No se recomienda su uso: esta versión introdujo APIchanges de ruptura (cambio de nombre de funciones principales) sin ninguna compatibilidad de ruta hacia atrás. Aplicaciones con dependencias transitivas tanto en el 0.2.x y 0.1.las API de x no pueden usar esta versión.
    • Nuevo: key-fn y: value-fn permiten una transformación flexible de los valores al leer & escribir JSON
    • Soporte para leer enteros grandes como BigInt
    • Soporte opcional para leer decimales como BigDecimal
    • Mejoras de rendimiento
  • La versión 0.1.3 de 2012-Mar-09
    • Corrige cadenas de escritura que contienen caracteres fuera del BMP
  • Versión 0.1.2 en 2011-Oct-14
    • Mejor análisis de escapes de caracteres hexadecimales
    • Corrección del error de manejo de EOF
    • Corrección de DJSON-1: advertencias de reflexión
  • Versión 0.1.1 de 2011-Jul-01
    • Asegúrese de que la impresión a *out* siempre utilice un impresor.
  • Lanzamiento 0.1.0 en 2011-Mar-18
    • Lanzamiento inicial.
    • Compatible con clojure.contrib.json, excepto por el cambio de nombre.

Copyright y Licencia

Copyright (c) Stuart Sierra, Rich Hickey y contribuciones 2012-2020.Todos los derechos reservados. Los términos de uso y distribución de este software están cubiertos por la Licencia pública de Eclipse 1.0 (https://opensource.org/licenses/eclipse-1.0.php) que se puede encontrar en el archivo epl-v10.html en la raíz de esto distribution.By al utilizar este software de cualquier manera, usted acepta estar sujeto a los términos de esta licencia. No debe eliminar este aviso, ni ningún otro, de este software.

Deja una respuesta

Tu dirección de correo electrónico no será publicada.