transform json 添加数组对象
transform json to add array objects
我需要通过添加额外的对象来转换数组 -
我有:
"user_id":"testuser"
"auth_token":"abcd"
我需要:
"key":"user_id"
"value":"testuser"
"key":"auth_token"
"value":"abcd"
我一直在使用 jq
,但不知道如何使用。我需要先将其转换为 multi-dimensional
数组吗?
我已经尝试了多个 jq
查询但找不到最合适的
当我尝试使用 jq
时,我得到
jq: error: syntax error, unexpected $end, expecting QQSTRING_TEXT or QQSTRING_INTERP_START or QQSTRING_END (Unix shell quoting issues?) at , line 1
您可以使用 to_entries 过滤器。
您的输入不是 json,它只是一堆可以被认为是 key/value 对的内容。假设您的 json 输入实际上是这样的:
{
"user_id": "testuser",
"auth_token": "abcd"
}
您可以使用 to_entries
.
获得 key/value 对对象的数组
$ 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
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"
}
我需要通过添加额外的对象来转换数组 -
我有:
"user_id":"testuser"
"auth_token":"abcd"
我需要:
"key":"user_id"
"value":"testuser"
"key":"auth_token"
"value":"abcd"
我一直在使用 jq
,但不知道如何使用。我需要先将其转换为 multi-dimensional
数组吗?
我已经尝试了多个 jq
查询但找不到最合适的
当我尝试使用 jq
时,我得到
jq: error: syntax error, unexpected $end, expecting QQSTRING_TEXT or QQSTRING_INTERP_START or QQSTRING_END (Unix shell quoting issues?) at , line 1
您可以使用 to_entries 过滤器。
您的输入不是 json,它只是一堆可以被认为是 key/value 对的内容。假设您的 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
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"
}