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 过滤器。

Here is jqplay example

您的输入不是 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"
}