This repository is private.
All pages are served over SSL and all pushing and pulling is done over SSH.
No one may fork, clone, or view it unless they are added as a member.
Every repository with this icon (
) is private.
Every repository with this icon (
This repository is public.
Anyone may fork, clone, or view it.
Every repository with this icon (
) is public.
Every repository with this icon (
| name | age | message | |
|---|---|---|---|
| |
.gitignore | Sun Nov 01 08:34:49 -0800 2009 | |
| |
LICENSE | Sat Nov 01 20:57:35 -0700 2008 | |
| |
README.markdown | Sat Apr 18 11:42:50 -0700 2009 | |
| |
build.xml | Tue Feb 17 14:51:01 -0800 2009 | |
| |
pom.xml | Thu Nov 05 14:59:24 -0800 2009 | |
| |
src/ | Sun Nov 01 09:09:02 -0800 2009 | |
| |
test/ | Thu Nov 05 14:59:41 -0800 2009 |
README.markdown
Installing
There are three ways to install clojure-json:
- Use
antto compile to a JAR:- To package .class files and .clj sources use:
ant -Dclojure.jar=/path/to/clojure.jar - To package only .clj sources use:
ant - Add
clojure-json.jarto your classpath
- To package .class files and .clj sources use:
- Just add the
srcdirectory to your classpath - Install with Maven 2.1.0
- mvn install
Using The Encoder
user=> (require '(org.danlarkin [json :as json]))
nil
user=> (print (json/encode-to-str [1 2 3 4 5]))
[1,2,3,4,5]nil
user=> (print (json/encode-to-str {:a 1 :b 2 :c 3}))
{"a":1,"b":2,"c":3}nil
user=> (print (json/encode-to-str [1 2 3 4 5] :indent 2))
[
1,
2,
3,
4,
5
]nil
user=> (import '(java.io FileWriter))
nil
user=> (json/encode-to-writer [1 2 3 4 5] (FileWriter. "/tmp/foo.json"))
#<FileWriter java.io.FileWriter@c93f91>
user=> (import '(java.util Date))
nil
user=> (json/encode-to-str (Date.))
java.lang.Exception: Unknown Datastructure: Sat Nov 5 19:00:00 GMT 1605 (NO_SOURCE_FILE:0)
user=> (defn date-encoder
[date writer pad current-indent start-token-indent indent-size]
(.append writer (str start-token-indent \" date \")))
#'user/date-encoder
user=> (json/add-encoder java.util.Date date-encoder)
#<MultiFn clojure.lang.MultiFn@da6c0d>
user=> (print (json/encode-to-str (Date.)))
"Sat Nov 5 19:00:00 GMT 1605"nil
user=> (print (json/encode-to-str [(Date.) (Date.) (Date.)] :indent 2))
[
"Sat Nov 5 19:00:00 GMT 1605",
"Sat Nov 5 19:00:00 GMT 1605",
"Sat Nov 5 19:00:00 GMT 1605"
]nil
user=> (print (json/encode-to-str {:foo (Date.) :bam 4 :quux 'bar} :indent 2))
{
"foo":"Sat Nov 5 19:00:00 GMT 1605",
"bam":4,
"quux":"bar"
}nil
Custom Encoding
clojure-json uses a multimethod for custom encoding, dispatching on type.
If you're adding an encoder function for a container type make sure to respect all of the indentation arguments
that your function will be passed and to call encode-helper on each of the elements in your container.
I've left the parameters to date-encoder un-hinted in this example in the interest of brevity but their inclusion
does seem to speed up execution time a good bit so I suggest using them where speed matters.
Using The Parser
user=> (require '(org.danlarkin [json :as json]))
nil
user=> (json/decode-from-str "[1, 2, 3, 4, 5]")
[1 2 3 4 5]
user=> (json/decode-from-str "{\"foo\":1, \"bar\":2, \"baz\":3}")
{:foo 1, :bar 2, :baz 3}
user=> (json/decode-from-str "{\"foo\":[1,2,\"superbam\"], \"bar\":{\"bam\":98.6}, \"baz\":3}")
{:foo [1 2 "superbam"], :bar {:bam 98.6}, :baz 3}
user=> (json/decode-from-reader (FileReader. "/tmp/foo.json"))
[1 2 3 4 5]
Special Thanks
Special thanks go to Darrell Bishop of arubanetworks.com for writing the parser included in this distribution.







