【问题标题】:Babashka: output valid json in a list of json fileBabashka:在json文件列表中输出有效的json
【发布时间】: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


    【解决方案1】:

    如果我理解正确,没有-o Babashka 会打印你的函数的结果,它是一个字符串。但是,如果您添加 -o,它会打印解释为 "lines of text" 的结果,这就是您想要的。

    因此,要解决您的问题,您只需将-o 添加到您传递给bb 的选项中:

    cat in.jsons | bb -i -o --stream script.clj > out.jsons
    

    【讨论】:

    • @Patinside 如果适合你,你可以接受我的回答;)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多