命令给出以下输出,该输出排列在一个对象中,如何使用jq将其转换为json?
{\n currentBlock: 4769045,\n highestBlock: 7063981,\n knownStates: 15306625,\n pulledStates: 15306625,\n startingBlock: 0\n}
N.B输出不是json;它包含\n
个字符串。
我使用以下内容进行了转换
echo "$output" | jq -R -s -c 'split("\n")'
但是输出不是我期望的
[“ {”,“ currentBlock:4787477,”,“ highestBlock:7063981,”,“ knownStates:15306625,”,“ pullStates:15306625,”,“ startingBlock:0”,“}”,“”] < / p>
答案 0 :(得分:1)
如果这里的问题是准JSON包含文字“ \ n”字符串,那么您可以使用sed 's/\\n//g'
删除它们:
$ output='{\n currentBlock: 4769045,\n highestBlock: 7063981,\n knownStates: 15306625,\n pulledStates: 15306625,\n startingBlock: 0\n}'
$ jq -n -f <(sed 's/\\n//g' <<< "$output")
另一种可能是使用printf
,例如
$ printf "$output" "" | hjson -j
两者均产生有效的JSON。
答案 1 :(得分:0)
在这种特殊情况下,最初显示的“输出”是有效的jq程序,因此要将其转换为JSON,您可以简单地将其作为程序提供给jq处理器,例如:
jq -n '{ currentBlock: 4479441, highestBlock: 7063981, knownStates: 15306625, pulledStates: 15306625, startingBlock: 0 }'
{
"currentBlock": 4479441,
"highestBlock": 7063981,
"knownStates": 15306625,
"pulledStates": 15306625,
"startingBlock": 0
}
如果准JSON位于文件中,例如data.txt,则只需运行:
jq -n -f data.txt
仅当文本碰巧作为jq程序有效时,此方法才有效。特别是,如果任何键是未加引号的jq关键字,或与正则表达式都不匹配,则将无法使用
^[A-Za-z_][A-Za-z0-9_]*$
答案 2 :(得分:0)
通用解决方案是使用诸如hjson之类的工具:
$ echo '{ currentBlock: 4479441, highestBlock: 7063981, knownStates: 15306625, pulledStates: 15306625, startingBlock: 0 }' |
hjson -j
{
"currentBlock": 4479441,
"highestBlock": 7063981,
"knownStates": 15306625,
"pulledStates": 15306625,
"startingBlock": 0
}