用jq-win替换json文件字段中的逗号

时间:2018-07-20 11:55:21

标签: json csv jq gsub

我在使用JSON文件时遇到问题。我在AutoIt sciript中启动curl以从Web下载json文件,然后通过jq-win将其转换为csv格式

jq-win32 -r ".[]" -c class.json>class.txt

并且json的格式如下:

[
{
"id":"1083",
"name":"AAAAA",
"channelNumber":8,
"channelImage":""},
{
"id":"1084",
"name":"bbbbb",
"channelNumber":7,
"channelImage":""},
{
"id":"1088",
"name":"CCCCCC",
"channelNumber":131,
"channelImage":""},
{
"id":"1089",
"name":"DDD,DDD",
"channelNumber":132,
"channelImage":""},
]

jq-win之后,文件应变为:

{"id":"1083","name":"AAAAA","channelNumber":8,"channelImage":""}
{"id":"1084","name":"bbbbb","channelNumber":7,"channelImage":""}
{"id":"1088","name":"CCCCCC","channelNumber":131,"channelImage":""}
{"id":"1089","name":"DDD,DDD","channelNumber":132,"channelImage":""}

,然后csv文件将由AutoIt脚本进一步处理,并变成:

AAAAA,1083
bbbbb,1084
CCCCCC,1088
DDD,DDD,1089

json大约有300条记录,其中5〜6条记录包含逗号,例如DDD,DDD 因此,当我尝试通过_FileReadToArray读取csv文件时,DDD,DDD中的逗号会引起麻烦。

我的问题是:我可以使用jq-win替换字段中的逗号吗? (我尝试使用fart.exe,但它将替换不适合我的json文件中的所有逗号。) 非常感谢。

规定 林志峰

1 个答案:

答案 0 :(得分:1)

  

我可以使用jq-win替换字段中的逗号吗?

是的。例如,使用gsub就像使用awk的gsub(","; "|") 一样,例如

.[]
| .name |= gsub(",";";")
| [.[]]
| map(tostring)
| join(",")

如果您需要更多详细信息,请根据[mcve]提供更多详细信息。

示例

使用给定的JSON输入,jq程序:

1083,AAAAA,8,
1084,bbbbb,7,
1088,CCCCCC,131,
1089,DDD;DDD,132,

产量:

import csv

selected_details = input("Enter student ID for details:\n")
with open('details.csv', 'rt') as f:
    reader = csv.reader(f)
    for line in reader:
        if selected_details in line:
            print(reader)
            break