2017-07-01 2 views
0

Kann jemand eine Clojure-Bibliothek empfehlen, Objekte mit komplexen Feldtypen wie UUID usw. richtig zu deserialisieren?Deserialisierung von JSON nach bereitgestelltem Schema in Clojure

Ich würde so etwas wie dies analysieren:

JSON

{ 
    "_id": 42, 
    "property1": "uuid-value" 
} 

Nach etwas wie folgt aus:

Schema

{ 
    "type" : "object", 
    "properties" : { 
     "_id" : {"type" : "integer"}, 
     "property1" : {"type" : "UUID"} 
    } 
} 

In som ething wie folgt aus:

Clojure Darstellung

{:_id 42 :property1 UUID("uuid-value")} 
+1

Sie https://github.com/dakrone/cheshire gesehen haben? – Josh

+0

ja, es macht einen perfekten Job im Codieren Teil, aber was ich frage, ist Entschlüsselung in Cheshire. – lllShamanlll

+0

Werfen Sie einen Blick auf [Transitformat] (https://github.com/cognitect/transit-format). Es verwendet kein JSON-Schema, ist jedoch ausdrücklich so konzipiert, dass UUIDs, Daten usw. bei der Decodierung in das native Programmiersprachenformat konvertiert werden. – ez121sl

Antwort

0

Sie

(cheshire.core/parse-string "{\"_id\":\"someId\",\"property1\":\"uuid-value\"}" true) 
+0

Also, es einfach UUID-Wert in Zeichenfolge decodieren. – lllShamanlll

0

Was über die Verwendung von json-schema Bibliothek versuchen können? Es scheint genau das Richtige zu sein.

Beispiel

(ns my.app 
    (:require [webjure.json-schema.validator :refer [validate]] 
      [cheshire.core :as cheshire])) 

    ;;; then in some function 
    (validate (cheshire/parse-string json-schema) 
       (cheshire/parse-string json-data)) 
+0

Ich habe schon kurz auf JSON-Schema geschaut. Keine Unterstützung für komplexe Typen gefunden, sowie Decodierung. Stattdessen verwendet es 'Cheshire/parse-string' wie oben gezeigt, um json zu dekodieren, so dass es nur eine String-Repräsentation für komplexe Typen sein wird. – lllShamanlll