我输入了一个json文件列表(假设是in.jsons):
{"a": "foo", "b": "bar"}
{"a": "bar", "d": "baz"}
...我想生成一个相同格式的文件,应用一些转换(my-awesome fn)。我想用babashka。我的第一感觉是一个简单的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编写器一起使用,而不是使用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时,我从未将流对象转换为string。
但我不知道如何才能解决我的问题。有人能帮帮我吗?
发布于 2021-09-01 20:59:42
如果我没理解错的话,如果没有-o,Babashka会打印函数的结果,这是一个字符串。但是,如果您添加了-o,它将打印解释为"lines of text"的结果,这正是您在这里想要的。
因此,要解决这个问题,您只需在传递给bb的选项中添加-o
cat in.jsons | bb -i -o --stream script.clj > out.jsonshttps://stackoverflow.com/questions/69020326
复制相似问题