0

我有以下 JSON:

[
{
    "test": "[\"example\"]"
},
{

    "test": ["example2"]
}
]

对于每个对象,我想 1] 检查“test”是否是字符串,2] 如果 test 是字符串,将其解析为实际的 JSON 数组,然后重新分配它。所以输出将是:

[
{
    "test": ["example"]
},
{

    "test": ["example2"]
}
]

我尝试了以下代码:map(if .test|type == "string" then .test= .test|fromjson else . end). 但是,我收到一条错误消息,说只能解析字符串。我认为这是因为 jq 认为.test不是字符串,但是,由于 if 语句,我知道 .test 是字符串,所以我不确定出了什么问题。

4

2 回答 2

1

jq 过滤器可以简化为:

map(if .test|type == "string" then .test |= fromjson else . end)

甚至:

map(.test |= if type == "string" then fromjson else . end)
于 2020-01-02T03:10:41.013 回答
0

解决方案原来是

map(if .test|type == "string" then .test=(.test|fromjson) else . end)

我猜很.test=.test|fromjson困惑jq

于 2020-01-01T23:47:42.897 回答