仅在字符串(而不是数字或列表)周围添加引号

时间:2020-07-01 21:40:42

标签: json jq

我输入的JSON格式为:

{
  "a": "apple",
  "b": "banana",
  "c": 5,
  "d": ["this", "is", "an", "array"],
  "e": false
}

我想要的是:

a="apple"
b="banana"
c=5
d=["this", "is", "an", "array"]
e=false

请注意,只有输入JSON中的字符串在输出中带有引号。

使用jq -r 'to_entries[] | "\(.key)=\"\(.value)\""'可以生成类似

的输出
a="apple"
b="banana"
c="5"
d="["this", "is", "an", "array"]"
e="false"

所以我的问题是:

  1. 使用jq解决此问题的正确方法是吗?还是应该使用正则表达式?
  2. 如果jq是正确的方向,该如何解决我提出的问题?

1 个答案:

答案 0 :(得分:2)

您可以使用typemanual entry)测试.value是否为字符串。

jq -r 'to_entries[]
      | "\(.key) = \( .value 
                      | if type == "string"
                        then "\"\(.)\""
                        else . 
                        end
                    )"'