首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Babashka:在json文件列表中输出有效的json

Babashka:在json文件列表中输出有效的json
EN

Stack Overflow用户
提问于 2021-09-01 20:39:33
回答 1查看 119关注 0票数 0

我输入了一个json文件列表(假设是in.jsons):

代码语言:javascript
复制
{"a": "foo", "b": "bar"}
{"a": "bar", "d": "baz"}
...

我想生成一个相同格式的文件,应用一些转换(my-awesome fn)。我想用babashka。我的第一感觉是一个简单的bash管道:

代码语言:javascript
复制
cat in.jsons | bb -i --stream script.clj > out.jsons

其中script.clj看起来像:

代码语言:javascript
复制
(require '[cheshire.core :as json])

(let  [in (json/parse-string *input* true)
       out (my-awesome-fn in)]
      (json/generate-string out))

我希望在out.jsons文件中看到的内容

代码语言:javascript
复制
{"aa": "faa", "bb": "bor"}
{"aa": "bii", "dd": "bla"}
...

我在out.jsons文件中得到的内容

代码语言:javascript
复制
"{\"aa\": \"faa\", \"bb\": \"bor\"}"
"{\"aa\": \"bii\", \"dd\": \"bla\"}"
...

我可以理解:我将我的数据转换为字符串,当转换到标准输出时再次转换。

如果我将generate-stream与适当的io编写器一起使用,而不是使用generate-string,我会得到如下结果:

代码语言:javascript
复制
{"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。

但我不知道如何才能解决我的问题。有人能帮帮我吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-09-01 20:59:42

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

因此,要解决这个问题,您只需在传递给bb的选项中添加-o

代码语言:javascript
复制
cat in.jsons | bb -i -o --stream script.clj > out.jsons
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69020326

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档