Ho una pazza idea, che consiste nel mettere un codice di clojure in CouchDB e scrivere viste che lo interrogano. Non voglio memorizzare il codice del clojure come testo normale, perché in quel caso dovrei preoccuparmi di analizzarlo nelle viste. La formattazione e i commenti non devono essere conservati, ma il codice dovrebbe essere in grado di entrare e uscire dal database senza modificare la struttura. Parole chiave, simboli e stringhe dovrebbero rimanere tutti nel loro tipo nativo. Inoltre, voglio che il codice sia elegante ed efficiente.Come mappare il codice clojure da e verso JSON?
sto pensando di rappresentare le cose come segue:
- simboli come stringhe che iniziano con '
- Parole come stringhe che iniziano con:
- Strings non modificato, tranne quando iniziano con' o : nel qual caso sono scappati con una barra rovesciata.
- (parentesi) come una matrice
- [parentesi] come un array con "_ []" come il primo elemento
- mappe ({}) come un oggetto
- set (# {}) come oggetto con i valori impostati su 1 e "_ # {}" incluso.
Critiche, esperienze e idee sono apprezzate.
Edit: Ecco cosa succede se provo la lettura e la scrittura di codice JSON utilizzando le funzioni JSON da clojure.contrib:
user> code
((ns bz.json.app (:use (ring.middleware file))) (defn hello [req] {:status 200, :headers {"Content-Type" "text/plain"}, :body "Hello World!"}) (def app (wrap-file hello "public")))
user> (read-json (json-str code))
[["ns" "bz.json.app" ["use" ["ring.middleware" "file"]]] ["defn" "hello" ["req"] {"body" "Hello World!", "headers" {"Content-Type" "text/plain"}, "status" 200}] ["def" "app" ["wrap-file" "hello" "public"]]]
C'è un bel po 'che deve essere fatto per la linea 4 della sopra per essere esattamente come la linea 2. Sembra che sia un progetto di libreria, a meno che non ci sia una funzione da qualche parte che non conosca.
Con una tale biblioteca, ecco cosa chiamarlo potrebbe essere simile:
user> (= (json-to-code (read-json (json-str (code-to-json code)))) code)
true
Mi piacerebbe contrassegnare questa domanda come risposta, ma le risposte finora non lo coprono davvero! Sto cercando un esempio di come deserializzare e serializzare su JSON, preservando i tipi che il lettore Clojure comprende. Ciò richiederà metadati. Scusa se si ottiene questa pagina quando si sta cercando un serializzatore/deserializzatore JSON di base per Clojure. Non è di questa domanda. –