【问题标题】:Multiple values for a particular key - JSON特定键的多个值 - JSON
【发布时间】:2020-03-16 14:24:46
【问题描述】:

JSON 格式:

{
  "Descriptions": [
    {
      "Name": "Doctor",
      "AttributeDescriptions": [],
      "TypeName": "Professional"
    },
    {
      "Name": "Pilot",
      "AttributeDescriptions": [
        {
          "AttributeValue": "",
          "AttributeName": ""
        }
      ]
    }
  ]
}

以上 JSON 值被分配给 shell 脚本中的变量 DescribeProfession。

我的目的是列出“名称”键的所有值。 当我使用下面的 python 代码时,它只打印第一个 value 。即,博士。但我需要所有三个值,

Doctor
Teacher
Pilot
python -c "import json; DescribeProfession=json.loads('$(echo $DescribeProfession)'); print(DescribeProfession['Descriptions'][0]['Name'])

我真的是 Python 脚本的新手。请您帮我更正这个 Python 脚本以打印 JSON 中键“名称”的所有值。

【问题讨论】:

  • print(profession['Name'] for profession in DescribeProfession['Descriptions'])
  • 你好@Tomalak,这是给我的 JSON 格式。我会努力改正的。
  • 是的,现在好多了!
  • 到底是什么问题?看起来你只需要一个循环,对吧?

标签: python json shell


【解决方案1】:

抛弃 python 并改用。

jq -rn --argjson in "$DescribeProfession" '$in.Descriptions[].Name'

或者,

jq -r '.Descriptions[].Name' <<<$DescribeProfession

或使用其他替代方式将字符串提供给程序的标准输入。

【讨论】:

  • 你好@oguz,谢谢你的回答。您能否提供一个与python相关的解决方案。我无法在我的 linux 机器上安装 jq。
【解决方案2】:

首先,您需要遍历"Descriptions" 值的所有元素。其次,您应该将 JSON 作为参数传递,而不是将其插入到 Python 脚本中。

python -c 'import json,sys; print("\n".join(x["Name"] for x in json.loads(sys.argv[1])["Descriptions"]))' "$DescribeProfession"

Python 不是编写 shell 单行代码的好选择,但如果将换行符嵌入到参数中会更简单。

python -c '
import json, sys
d = json.loads(sys.argv[1])
for x in d["Descriptions"]:
  print(x["Name"])
' "$DescribeProfession"

【讨论】:

    【解决方案3】:

    您正在打印 Name 属性 DescribeProfession['Descriptions'][0]['Name'],这意味着来自 'Descriptions' 数组的第一个元素。

    您应该遍历数组并打印所有DescribeProfession['Descriptions'][i]['Name']

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-15
      相关资源
      最近更新 更多