首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >生成带格式的json文件

生成带格式的json文件
EN

Stack Overflow用户
提问于 2018-09-26 04:41:48
回答 4查看 113关注 0票数 1

我有一个curl命令,它可以生成json输出。我想在生成的文件中添加几个字符,以便能够进一步处理它。

命令:

代码语言:javascript
复制
curl -sN --negotiate -u foo:bar "http://hostname/db/tbl_name/" >> db.json

这在一个for循环下运行,该循环为db和tbl_name组合运行它。因此,它最终生成多个json输出(每个表一个),这些输出连接在一起,没有任何分隔符。

输出如下所示:

{“列”:{“名称”:“tbl_id”,“类型”:“varchar(50)”},{“名称”:“cret_timestmp”,“类型”:“时间戳”},{“名称”:“updt_timestmp”,“类型”:“时间戳”},{“名称”:“frst_nm”,“类型”:“varchar(50)”},{“名称”:“last_nm”,“类型”:“varchar(50)”},{"name":"acct_num","type":"varchar(15)"},{"name":"r_num","type":"varchar(15)"},{"name":"pid","type":"decimal(15,0)"},{"name":"ami_id","type":"varchar(30)"},{"name":"ssn","type":"varchar(9)"},{“名称”:“client_id”,“类型”:“varchar(30)”},{“名称”:“client_nm”,“类型”:“varchar(100)”},{“名称”:“信息”,“类型”:“时间戳”},{“名称”:“rmx”,“类型”:“varchar(10)”},{“名称”:“id”,“类型”:“decimal(12,0)”},{“名称”:“ingest_timestamp”,“类型”:“字符串”},{“名称”:“incr_ingest_timestamp”,“类型”:“字符串”},“数据库”:“db_i”,“表”:“db_tbl”}{“列”:{“名称”:“键”,“类型”:“varchar(15)”},{“名称”:“foo_cd”,“类型”:“varchar(10)”},{“名称”:“foo_nm”,“类型”:“varchar(56)”},{“名称”:“tmc_regn_cd”,“类型”:“varchar(10)”},{“名称”:“tmc_mrkt_cd”,“类型”:“varchar(20)”},{“名称”:“mrkt_grp”,“类型”:“varchar(30)”},{“名称”:“ingest_timestamp”,“类型”:“字符串”},{“名称”:“incr_ingest_timestamp”,“类型”:“字符串”},“数据库”:“db_i”,"table":"ss_mv"}{"columns":{"name":"bar_src_name",“类型”:“字符串”},{“名称”:“bar_ent_name”,“类型”:“字符串”},{“名称”:“from_src”,“类型”:“字符串”},{“名称”:“重新加载”,“类型”:“字符串”},{“名称”:“column_mismatch”,“类型”:“字符串”},{“名称”:“xx_src_name”,“类型”:“字符串”},{“名称”:“xx_ent_name”,“类型”:“字符串”},“数据库”:“db_i”,“表”:“test_table”}

所需的输出是以[]开始和结束输出。我还想在列列表开始的末尾和开头之间包含",“。

因此,对于ex:如果curl命令针对上面所示的3个表运行,那么生成的3个json应该如下所示:

代码语言:javascript
复制
 [{json1},{json2},{json3}]

编号1、2、3的...etc对应于在针对特定db的for循环中运行的curl命令中的不同表,所述特定db的json应被创建在一个文件中但具有所需的格式。

而不是我现在得到的:

代码语言:javascript
复制
 {json1}{json2}{json3}

在上面粘贴的输出中,JSON 1是:

{“列”:{“名称”:“tbl_id”,“类型”:“varchar(50)”},{“名称”:“cret_timestmp”,“类型”:“时间戳”},{“名称”:“updt_timestmp”,“类型”:“时间戳”},{“名称”:“frst_nm”,“类型”:“varchar(50)”},{“名称”:“last_nm”,“类型”:“varchar(50)”},{"name":"acct_num","type":"varchar(15)"},{"name":"r_num","type":"varchar(15)"},{"name":"pid","type":"decimal(15,0)"},{"name":"ami_id","type":"varchar(30)"},{"name":"ssn","type":"varchar(9)"},{“名称”:“client_id”,“类型”:“varchar(30)”},{“名称”:“client_nm”,“类型”:“varchar(100)”},{“名称”:“信息”,“类型”:“时间戳”},{“名称”:“rmx”,“类型”:“varchar(10)”},{“名称”:“id”,“类型”:“decimal(12,0)”},{“名称”:“ingest_timestamp”,“类型”:“字符串”},{“名称”:“incr_ingest_timestamp”,“类型”:“字符串”},“数据库”:“db_i”,“表”:“db_tbl”}

JSON 2是:

{“列”:{“名称”:“键”,“类型”:“varchar(15)”},{“名称”:“foo_cd”,“类型”:“varchar(10)”},{“名称”:“foo_nm”,“类型”:“varchar(56)”},{“名称”:“tmc_regn_cd”,“类型”:“varchar(10)”},{“名称”:“tmc_mrkt_cd”,“类型”:“varchar(20)”},{“名称”:“mrkt_grp”,“类型”:“varchar(30)”},{“名称”:“ingest_timestamp”,“类型”:“字符串”},{“名称”:“incr_ingest_timestamp”,“类型”:“字符串”},“数据库”:“db_i”,“表”:“ss_mv”}

JSON 3是:

{“列”:{“名称”:“bar_src_name”,“类型”:“字符串”},{“名称”:“bar_ent_name”,“类型”:“字符串”},{“名称”:“from_src”,“类型”:“字符串”},{“名称”:“重新加载”,“类型”:“字符串”},{“名称”:“column_mismatch”,“类型”:“字符串”},{“名称”:“xx_src_name”,“类型”:“字符串”},{“名称”:“xx_ent_name”,“类型”:“字符串”},“数据库”:“db_i”,“表”:“test_table”}

我希望需求是明确的,提前感谢,希望通过bash实现这一点。

EN

回答 4

Stack Overflow用户

发布于 2018-09-26 05:01:34

使用jq -s

JSON --slurp/-s:不是为输入中的每个

对象运行过滤器,而是将整个输入流读取到一个大型数组中,然后只运行一次过滤器。

下面是一个例子:

代码语言:javascript
复制
$ cat file.json
{ "key": "value1" }
{ "key": "value2" }
{ "key":
"value3"}{"key": "value4"}

$ jq -s < file.json
[
  {
    "key": "value1"
  },
  {
    "key": "value2"
  },
  {
    "key": "value3"
  },
  {
    "key": "value4"
  }
]
票数 2
EN

Stack Overflow用户

发布于 2018-09-26 16:54:28

我不确定我是否理解正确,但我认为您正在寻找类似于

代码语言:javascript
复制
 echo "[$(cat *.json | paste -sd ',')]" > result.json

它的工作原理是创建一个以[开头、以]结尾的字符串,中间是用逗号分隔(在paste的帮助下)和连接(cat)的json文件的内容。该字符串被echo编辑并写入到一个新文件中。

票数 1
EN

Stack Overflow用户

发布于 2018-09-27 23:21:20

假设输入采用有效的JSONL格式(每行输入一个JSON文档),则可以在bash脚本中嵌入Python脚本:

代码语言:javascript
复制
slurpjson_py='
import json, sys
json.dump([json.loads(line.strip()) for line in sys.stdin], sys.stdout, indent=4)
sys.stdout.write("\n")
'

slurpjson() { python -c "$slurpjson_py" "$@"; }

如果调用为:

代码语言:javascript
复制
slurpjson <<EOF
{ "first": "document", "starting": "here" }
{ "second": "document", "ending": "here" }
EOF

...output是正确的:

代码语言:javascript
复制
[
    {
        "starting": "here",
        "first": "document"
    },
    {
        "second": "document",
        "ending": "here"
    }
]
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52506397

复制
相关文章

相似问题

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