我需要通过添加其他对象来变换数组-
我有
"user_id":"testuser"
"auth_token":"abcd"
我需要:
"key":"user_id"
"value":"testuser"
"key":"auth_token"
"value":"abcd"
我一直在使用jq
,但不知道该怎么做。我是否需要先将其转换为multi-dimensional
数组?
我尝试了多个jq
查询,但是找不到最合适的
当我尝试使用jq
时,我会得到
jq:错误:语法错误,意外的$ end,期望在第1行的QQSTRING_TEXT或QQSTRING_INTERP_START或QQSTRING_END(Unix shell引用问题?)
答案 0 :(得分:1)
您可以为此使用 to_entries 过滤器。
答案 1 :(得分:1)
您的输入不是json,它只是一堆可以视为键/值对的东西。假设您的json输入实际上看起来像这样:
{
"user_id": "testuser",
"auth_token": "abcd"
}
您可以使用to_entries
获取键/值对对象数组。
$ jq 'to_entries' input.json
[
{
"key": "user_id",
"value": "testuser"
},
{
"key": "auth_token",
"value": "abcd"
}
]
如果另一方面您的输入实际上是该输入,则需要将其转换为可以处理的格式。幸运的是,您可以将其读取为原始字符串,并可以使用正则表达式或基本的字符串操作进行解析。
$ jq -Rn '[inputs|capture("\"(?<key>[^\"]+)\":\"(?<value>[^\"]*)\"")]' input.txt
$ jq -Rn '[inputs|split(":")|map(fromjson)|{key:.[0],value:.[1]}]' input.txt
答案 2 :(得分:1)
key:value
行到JSON的严格转换。如果key:value
规范是有效的JSON,除了
缺少标点符号(打开和闭合大括号等),则以下示例说明了将这些key:value对转换为单个有效JSON对象的简单且非常可靠的方法:
cat <<EOF | jq -nc -R '["{" + inputs + "}" | fromjson] | add'
"user_id": "testuser"
"auth_token" : "abcd"
EOF
{
"user_id": "testuser",
"auth_token": "abcd"
}