【问题标题】:Parse JSON data into a variable assignment format将 JSON 数据解析为变量赋值格式
【发布时间】:2016-05-02 12:38:34
【问题描述】:

我正在尝试将 JSON 数据解析为可变格式

[
  {
    "Name" : "a",
    "Value" : "1"
  },
  {
    "Name" : "b",
    "Value" : "2"
  },
  {
    "Name" : "c",
    "Value" : "3"
  }
]

输出应该是这样的

a=1
b=2
c=3

这是我尝试过的,但它没有给出预期的结果:

jq '.[].Value' file.txt 

【问题讨论】:

  • 您对jq 做了什么尝试?你可能很接近了!
  • jq .[].Name file.txt or jq .[].Value file.txt 这是打印键,一次valye但是如何为键赋值
  • cat file.txt |jq -r '.[].Name,.[].Value' 我试过这个。现在如何为输出中的键赋值?

标签: json shell jq


【解决方案1】:

由于您只打印出两个值,因此直接打印出字符串可能更容易。

$ jq -r '.[] | "\(.Name)=\(.Value)"' file.txt

【讨论】:

  • 比我尝试使用列表然后加入要好。如果使用 jq 可以进行字符串插值,我从来不知道这种情况。
  • 还有... | .Name + "=" + .Value
【解决方案2】:

您可以使用以下jq 命令:

jq -r '.[]|[.Name,.Value]|join("=")' file.json

输出:

a=1
b=2
c=3

【讨论】:

  • 这个答案更好地代表了预期的输出,但如果 json 格式需要通过其他修改来保存,我的答案可能会很有用。随意将我的复制到您的答案中,以提供一个包罗万象的解决方案(然后我将删除我的)。
  • @bishop 我明白你的意思,但让我保持简单。在这种情况下,读者仍然可以选择您的答案。
【解决方案3】:

使用jq

jq 'map({(.Name):.Value})|add|.//={}' < data.json

生产:

{
  "a": "1",
  "b": "2",
  "c": "3"
}

如果您有jq 1.5+ 版本,则可以改用from_entries

【讨论】:

    【解决方案4】:

    这样就可以了

    python3 -c 'import json; print("\n".join(["{}={}".format(x["Value"], x["Name"]) for x in json.load(open("file.json"))]))'
    

    结果

    a=1
    b=2
    c=3
    

    【讨论】:

    • 这里用 Python 解决方案是不够的,他专门寻找 jq 解决方案。
    猜你喜欢
    • 2022-08-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-23
    • 1970-01-01
    • 1970-01-01
    • 2021-11-08
    相关资源
    最近更新 更多