【发布时间】:2021-09-01 20:39:32
【问题描述】:
我输入了一个 jsons 文件列表(比如说 in.jsons):
{"a": "foo", "b": "bar"}
{"a": "bar", "d": "baz"}
...
我想生成一个格式相同的文件,应用一些转换 (my-awesome-fn)。我想用巴巴什卡。我的第一感觉是一个简单的 bash 管道:
cat in.jsons | bb -i --stream script.clj > out.jsons
script.clj 的样子:
(require '[cheshire.core :as json])
(let [in (json/parse-string *input* true)
out (my-awesome-fn in)]
(json/generate-string out))
我希望在 out.jsons 文件中看到的内容
{"aa": "faa", "bb": "bor"}
{"aa": "bii", "dd": "bla"}
...
我在 out.jsons 文件中得到了什么
"{\"aa\": \"faa\", \"bb\": \"bor\"}"
"{\"aa\": \"bii\", \"dd\": \"bla\"}"
...
我可以理解:我将我的数据转换为标准输出时再次转换的字符串。
如果我将 generate-stream 与适当的 io writer 一起使用而不是 generate-string,我会得到类似的结果:
{"aa": "faa", "bb": "bor"}#object[java.io.BufferedWriter 0x13e21dd4 "java.io.BufferedWriter@13e21dd4"
{"aa": "bii", "dd": "bla"}#object[java.io.BufferedWriter 0x13e21df5 "java.io.BufferedWriter@13e21df5"
...
我也能理解这个结果。回到 bash 时,我从未将流对象转换为字符串。
但我不知道如何解决我的问题。有人可以帮帮我吗?
【问题讨论】:
标签: json clojure pipe babashka