我有这个 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 不起作用。知道我做错了什么吗?
您似乎将语法与值混淆了。引号不是值的一部分;该值分别以
[
和 ]
开头和结尾(不是 "[
和 "]
;如果语法引用是值的一部分,后者甚至没有意义)。要检测对象,您需要检查 {
和 }
前缀和后缀。您需要过滤字符串值,否则无法应用 startswith
过滤器。
完整节目:
map_values(
if type == "string" and (startswith("[") and endswith("]") or startswith("{") and endswith("}")) then
gsub("'"; "\"") | fromjson
else
.
end
)