File tree Expand file tree Collapse file tree
main/clojure/clojure/data
test/clojure/clojure/data Expand file tree Collapse file tree Original file line number Diff line number Diff line change 367367 :key-fn nil
368368 :value-fn nil })
369369(defn read
370- " Reads a single item of JSON data from a java.io.Reader. Options are
371- key-value pairs, valid options are:
370+ " Reads a single item of JSON data from a java.io.Reader.
371+
372+ If you wish to repeatedly read items from the same reader, you must
373+ supply a PushbackReader and reuse it on subsequent calls.
374+
375+ Options are key-value pairs, valid options are:
372376
373377 :eof-error? boolean
374378
403407 collections."
404408 [reader & {:as options}]
405409 (let [{:keys [eof-error? eof-value]
406- :or {eof-error? true }} options]
410+ :or {eof-error? true }} options
411+ pbr (if (instance? PushbackReader reader)
412+ reader
413+ (PushbackReader. reader 64 ))]
407414 (->> options
408415 (merge default-read-options )
409- (-read ( PushbackReader. reader 64 ) eof-error? eof-value))))
416+ (-read pbr eof-error? eof-value))))
410417
411418(defn read-str
412419 " Reads one JSON value from input String. Options are the same as for
Original file line number Diff line number Diff line change 77 (let [s (java.io.PushbackReader. (java.io.StringReader. " 42" ))]
88 (is (= 42 (json/read s)))))
99
10+ ; ; DJSON-50 - pass PBR to safely do reapeated read
11+ (deftest read-multiple
12+ (let [st " {\" foo\" :\" some string\" }{\" foo\" :\" another string\" }"
13+ srdr (java.io.StringReader. st)
14+ pbr (java.io.PushbackReader. srdr 64 )]
15+ (is (= {" foo" " some string" } (json/read pbr)))
16+ (is (= {" foo" " another string" } (json/read pbr))))
17+
18+ (let [st " {\" foo\" :\" some string\" }{\" foo\" :\" another long ......................................................... string\" }"
19+ srdr (java.io.StringReader. st)
20+ pbr (java.io.PushbackReader. srdr 64 )]
21+ (is (= {" foo" " some string" } (json/read pbr)))
22+ (is (= {" foo" " another long ......................................................... string" } (json/read pbr)))))
23+
1024(deftest read-from-reader
1125 (let [s (java.io.StringReader. " 42" )]
1226 (is (= 42 (json/read s)))))
You can’t perform that action at this time.
0 commit comments