【问题标题】:Json file gets load as list instead of dict. using pythonJson 文件作为列表而不是字典加载。使用蟒蛇
【发布时间】:2020-07-10 12:44:46
【问题描述】:

我正在尝试学习从 json 文件中获取信息。 250MB 大小的 json 文件在我的桌面上。

我是 python 新手,尽管不知疲倦地谷歌寻找答案,但我确信我错过了一些东西。

我理解,当我加载 Json 文件时,预期的类型是字典。

import json

with open (r'c:\eseek\limitsdata.json) as f:
   data = json.load(f)

print type(data)

我得到 作为输出... 但不确定为什么这不是我在许多教程中看到的字典

我刚刚意识到这类似于已经发布的帖子 [https://stackoverflow.com/questions/57030807/python-json-loads-returns-list-instead-of-dict]

我想迭代到 json,但是当我尝试以下步骤时......它不起作用

data_str = json.dumps(data)
print(data_str[0])

我没有得到第一个嵌套组,但我得到了第一个字符串“[”

我知道我在这里遗漏了一些东西。如果有人可以突出显示相同的内容,那就太好了

样本数据。如果主文件中的模型为 500,我正在尝试任务详细信息。

[
    {
        "Model": " 500",
        "Task": “71-00-00-200-802 ",

    },
    {
        "Model": " 900",
        "Task": " 71-00-00-200-802",

    }
]

【问题讨论】:

  • 可以加几行c:\eseek\limitsdata.json
  • 嗨@Marco .. 我已按您的要求添加了更多信息
  • 文件的根元素似乎是一个列表。为什么你期望结果是dict
  • @0x5453 我查看的大部分参考资料都告诉我这将是一个字典
  • "我理解,当我加载 Json 文件时,预期的类型是字典。"不,预期的类型取决于文件 in 的实际内容。一个文件包含单个 JSON 对象,然后将其解码为 Python dict,这是非常常见的

标签: python json parsing


【解决方案1】:

如果第一个字符是“[”,那么 json 文件确实应该被解析为一个列表。例如,

a_list = json.loads("[ 'a', 'b', 'c' ] ")   # should give list [a,b,c]
a_dict = json.loads("{ 'data' : ['a', 'b', 'c']} ") # gives a dict

print(type(a_list), type(a_dict)) # should be list, dict
a_dict['data']  # can look up the field in this dict

至于您的第二个问题:如果您想遍历 items(上面a_list 的第一项是“a”项),请将其保留为列表。如果你想遍历字符json.dumps(a_list)的第一个字符是“[”),那么你先把它转换成字符串。

您不需要将 json 转换回字符串来对其进行迭代,并且可以这样做

for item in a_list:
    print(item)

编辑:特别是对于您的数据,您可以按如下方式访问字段:

with open (r'c:\eseek\limitsdata.json') as f:
   data = json.load(f)

print( data[0]["Model"] ) # prints '500'
print( data[1]["Task"] ) # prints ' 71-00-00-200-802'

【讨论】:

    猜你喜欢
    • 2022-06-17
    • 2019-03-25
    • 1970-01-01
    • 1970-01-01
    • 2018-06-11
    • 2020-02-15
    • 2013-08-07
    • 2021-09-26
    相关资源
    最近更新 更多