我正在使用这样的端点:
curl -S www.example.com
[[\"A", "B", "C", "D"]\n
["1","2",null,"4"]]
我想使用jq将此响应更改为适当的json,而不是标题列表和与列表中的项目对应的一行数据:
{"A": "1", "B": "2", "C" : null, "D": "4"}
但是,here的显而易见答案
个
curl -S www.example.com | jq '{(.[0]) : .[1] }'
产生
jq: error (at <stdin>:1): Cannot use array (["A...) as object key
还有
curl -S www.example.com | jq '{.[0] : .[1] }'
产生
jq: error: syntax error, unexpected '.' (Unix shell quoting issues?) at <top-level>, line 1:
{.[0] : .[1] }
jq: 1 compile error
什么是正确的语法
[[HEADER1,HEADER2,...]\n
[DATA1,DATA2]]
响应到json吗?
未引用的null和换行符是我的问题的根源吗?
答案 0 :(得分:1)
根据发布的内容,curl命令的输出太奇怪了,需要进行特殊处理。可能是输出不像所示的那样怪异,并且作为下面解决方案一部分显示的sed
命令可能需要调整。
无论如何,输入如下所示:
sed 's/\\"/"/;1s/\\n/,/' input.txt | jq '
.[0] as $h
| .[1]
| . as $in
| reduce range(0;length) as $i
({}; .[$h[$i]] = $in[$i])'
产生所需的输出。
jq -Rs < input.txt '
split("\n")
| map(select(length>0))
| ( .[0] | sub("[[]\\\\"; "") | sub("\\\\n"; "") | fromjson) as $h
| .[1]
| sub("\\]\\]"; "]")
| fromjson
| . as $in
| reduce range(0;length) as $i
({}; .[$h[$i]] = $in[$i])'