From 9a2a2f5f56160ad9b9e3e0b703d9dc64db99fbf3 Mon Sep 17 00:00:00 2001 From: Andy Fingerhut Date: Mon, 21 Jan 2013 22:28:04 -0800 Subject: [PATCH] Omit writing the comma after key/value pairs removed by :value-fn --- src/main/clojure/clojure/data/json.clj | 9 +++++---- src/test/clojure/clojure/data/json_test.clj | 8 +++++++- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/src/main/clojure/clojure/data/json.clj b/src/main/clojure/clojure/data/json.clj index d8f2c8a..bc14e2f 100644 --- a/src/main/clojure/clojure/data/json.clj +++ b/src/main/clojure/clojure/data/json.clj @@ -311,16 +311,17 @@ (when (seq m) (let [[k v] (first x) out-key (*key-fn* k) - out-value (*value-fn* k v)] + out-value (*value-fn* k v) + nxt (next x)] (when-not (string? out-key) (throw (Exception. "JSON object keys must be strings"))) (when-not (= *value-fn* out-value) (write-string out-key out) (.print out \:) - (-write out-value out))) - (let [nxt (next x)] + (-write out-value out) + (when (seq nxt) + (.print out \,))) (when (seq nxt) - (.print out \,) (recur nxt))))) (.print out \})) diff --git a/src/test/clojure/clojure/data/json_test.clj b/src/test/clojure/clojure/data/json_test.clj index 5541a10..7a4176e 100644 --- a/src/test/clojure/clojure/data/json_test.clj +++ b/src/test/clojure/clojure/data/json_test.clj @@ -110,7 +110,13 @@ :value-fn (fn thisfn [k v] (if (= :date k) thisfn - v)))))) + v))))) + (is (= "{\"c\":1,\"e\":2}" + (json/write-str {:a nil, :b nil, :c 1, :d nil, :e 2, :f nil} + :value-fn (fn remove-nils [k v] + (if (nil? v) + remove-nils + v)))))) (declare pass1-string) -- 1.8.0