jq 解析字符串数组和字符串对象

问题描述 投票:0回答:1

我有这个 json 字符串:

json_string="{\"emailRecipients\":\"['[email protected]', '[email protected]', '[email protected]']\", \"anotherEmails\":\"{'test1': '[email protected]', 'test2': '[email protected]', 'test3': '[email protected]'}\", \"some_key\": 3, \"another_key\": \"some_value\"}"

我正在尝试使用 jq 将

emailRecipients
解析为 json 数组,将
anotherEmails
解析为 json 对象。

我正在尝试创建一个可以使用任何键的命令,而不仅仅是

emailRecipients
anotherEmails
。我还需要保持内部没有 json 对象/数组的键值完整。

所以我尝试这样做:

parsed_json=$(echo "$json_string" | jq 'with_entries(
    .value |= if startswith("\"[") and endswith("\"]") then
        gsub("''";"\"") | fromjson
    else
        .
    end
)')

但我不知道为什么 gsub 不起作用。知道我做错了什么吗?

json bash jq
1个回答
0
投票

您似乎将语法与值混淆了。引号不是值的一部分;该值分别以

[
]
开头和结尾(不是
"[
"]
;如果语法引用是值的一部分,后者甚至没有意义)。要检测对象,您需要检查
{
}
前缀和后缀。您需要过滤字符串值,否则无法应用
startswith
过滤器。

完整节目:

map_values(
    if type == "string" and (startswith("[") and endswith("]") or startswith("{") and endswith("}")) then
        gsub("'"; "\"") | fromjson
    else
        .
    end
)
© www.soinside.com 2019 - 2024. All rights reserved.