【问题标题】:Parse Json file and save specific values [duplicate]解析Json文件并保存特定值[重复]
【发布时间】:2018-07-12 21:19:14
【问题描述】:

我有这个 JSON 文件,其中 id 的数量有时会发生变化(将添加更多的 id):

{
    "maps": [
        {
            "id": "blabla1",
            "iscategorical": "0"
        },
        {
            "id": "blabla2",
            "iscategorical": "0"
        },
        {
            "id": "blabla3",
            "iscategorical": "0"
        },
        {
            "id": "blabla4",
            "iscategorical": "0"
        }
    ]
}

我有这个 python 代码必须打印所有的 id 值:

import json

data = json.load(open('data.json'))
variable1 = data["maps"][0]["id"]
print(variable1)
variable2 = data["maps"][1]["id"]
print(variable2)
variable3 = data["maps"][2]["id"]
print(variable3)
variable4 = data["maps"][3]["id"]
print(variable4)

我必须使用变量,因为我想在下拉菜单中显示值。是否可以以更有效的方式保存 id 的值?你怎么知道这个 json 文件的最大 id 数量(在示例 4 中)?

【问题讨论】:

  • 您可以将 ID 的值放在元组或列表中吗?
  • 不要将它们存储在变量中,将它们存储在列表中。列表也知道它的长度。

标签: python json


【解决方案1】:

通过查看data['maps']length可以得到id的个数(也就是元素个数):

number_of_ids = len(data['maps'])

获取所有id 值的一种简洁方法是将它们存储在list 中。

您可以像这样以 Python 的方式实现这一点:

list_of_ids = [map['id'] for map in data['maps']]

使用这种方法,您甚至不需要将元素的数量存储在原始 json 中,因为本质上您使用 foreach 方法遍历所有元素。

如果 pythonic 方法给您带来困扰,您可以使用经典的foreach 方法实现相同的目的:

list_of_ids = []
for map in data['maps']:
    list_of_ids.append(map['id'])

或者您可以使用经典 for loop,这是您真正需要长度的地方:

number_of_ids = len(data['maps'])
list_of_ids = []
for i in range(0,number_of_ids):
    list_of_ids.append(data['maps'][i]['id'])

这最后一种是经典的方式,但我建议你采取其他方式,以利用 python 提供给你的优势!

你可以找到更多关于这些东西here

编码愉快!

【讨论】:

  • 发帖者对for 循环的概念有疑问。目前,在我看来,向他们建议列表推导式太多了。
  • 嗯,好的,我也来加一下常用的方式!
【解决方案2】:

data['maps'] 是一个简单的列表,因此您可以这样迭代它:

for map in data['maps']:
    print(map['id'])

要将它们存储在变量中,您需要将它们输出到列表中。将它们分别存储在一个单独的变量中并不是一个好主意,因为就像您说的那样,您无法知道有多少。

ids = []
for map in data['maps']:
    ids.append(map['id'])

【讨论】:

  • OP 还询问列表中有多少个 ID。
  • 因为我要制作下拉菜单,所以我必须将它们存储在变量中。我在这里卡住了。这个例子是一个很好的开始
  • 你是如何创建“下拉菜单”的?如果没有看到你的代码,或者至少是什么框架,我无法提供更多帮助。请更新您的问题。
  • 我使用了一个下拉列表。感谢您用列表更改帖子! OptionMenu(root, self.dropBoard, *ids).grid(row=0, column=0)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-06
  • 2012-02-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多