   "Parse a single item of JSON data from a java.io.Reader. Options are
   key-value pairs, valid options are:
 
+     :eof-error? boolean
+
+        If true (default) will throw exception if the stream is empty.
+
+     :eof-value Object
+
+        Object to return if the stream is empty and eof-error? is
+        false. Default is nil.
+
      :bigdec boolean
 
         If true use BigDecimal for decimal numbers instead of Double.
         Default is false.
 
-     :eof-error? boolean
-
-        If true (default) will throw exception if the stream is empty.
-
-     :eof-value Object
-
-        Object to return if the stream is empty and eof-error? is
-        false. Default is nil.
-
      :key-fn function
 
         Single-argument function called on JSON property names; return
         value will replace the property names in the output. Default
-        is clojure.core/keyword.
+        is clojure.core/identity, use clojure.core/keyword to get
+        keyword properties.
 
      :value-fn function
 

(extend java.lang.Object       JSONWriter {:-write-json write-generic})

(defn write-json
  "Write JSON-formatted output to a java.io.Writer.
   Options are key-value pairs, valid options are:

    :escape-unicode boolean


        name (transformed by key-fn) and the value. The return value
        of value-fn will replace the value in the output. If value-fn
        returns itself, the property will be omitted from the output.
        The default value-fn returns the value unchanged."
  [reader & options]
  (let [{:keys [eof-error? eof-value bigdec key-fn value-fn]
         :or {bigdec false
              eof-error? true
              key-fn identity
              value-fn default-value-fn}} options]
    (binding [*bigdec* bigdec
              *key-fn* key-fn
              *value-fn* value-fn]
      (-parse reader eof-error? eof-value))))

(defn parse-string
  "Reads one JSON value from input String. Options are the same as for
