【问题标题】:Python JSON load / decoding list of objectsPython JSON加载/解码对象列表
【发布时间】:2017-08-03 06:18:43
【问题描述】:

我正在尝试弄清楚如何使用此内容加载名为 foo.json 的文件:

[
    {
        "bar1":  "foobar1-1",
        "bar2":  "foobar1-2",
        "bar3":  "foobar1-3"
    },
    {
        "bar1":  "foobar2-1",
        "bar2":  "foobar2-2",
        "bar3":  "foobar2-3"
    }
]

我试过的代码:

 with open('foo.json') as data_file:    
    print(data_file)
    data = json.load(data_file)
    print(data)

我所看到的使用 json.load 解析 json 的所有内容似乎都适用于字典内容,但这个 json 表示对象数组或字典数组。 Json.load 似乎甚至不适用于字典数组。也许我需要为此使用不同的 json 解析库。任何帮助表示赞赏。

【问题讨论】:

  • 您遇到了什么问题?我不知道您所说的“json.load 中的所有内容似乎都面向字典内容”是什么意思……但是 json 模块可以很好地处理任何有效的 JSON。
  • Aa 问题是 这不是有效的 JSON,因为额外的逗号。尝试将其复制粘贴到jsonlint.com 并点击验证。
  • 对不起,我试图为这篇文章创建一个简化版本的 json 数据,但我不小心留下了逗号。我已经在帖子中编辑了它们。
  • 好的,但现在加载正常。再次您遇到的问题究竟是什么?您只是含糊地说“Json.load 似乎甚至不适用于一系列字典。”但那绝对不是真的
  • 确实,我已将您的示例数据放入一个文件中,并使用了您的确切代码,它按预期运行...

标签: python json parsing anaconda python-collections


【解决方案1】:

哇,这太尴尬了。我刚刚从这篇文章中复制并粘贴了我的代码以仔细检查它并且它有效。我检查了新文件,发现它是 ASCII。我有 2 天问题的原始文件是 UTF-16。我将 UTF-16 转换为 ASCII 并且 json.load 有效!所以这是文件类型的问题。我想我只需要弄清楚如何让 json.load 来理解 UTF-16 文件!

【讨论】:

  • open('whatever.json', encoding='utf-16')'utf-16-le''utf-16-be',但您应该始终知道您的编码。如果您确实在帖子中包含错误,那将是一个线索,但每个人都只能猜测。
  • 对不起,这是我的第一个 python 程序。我几乎不知道如何使用 Visual Studio 2017 IDE,这个错误似乎很不祥,我认为它没有任何价值加上 DOS 弹出窗口复制和粘贴很痛苦..顺便说一句,IDE 不显示“当我开始输入逗号然后输入“e”时它向我显示选项时,编码”作为参数,但我还是添加了它并且它有效!谢谢!
【解决方案2】:

json 文件无效,请删除每个字典中的最后一个逗号 (',')。之后它会正常工作:)

[
    {
        "bar1":  "foobar1-1",
        "bar2":  "foobar1-2",
        "bar3":  "foobar1-3"
    },
    {
        "bar1":  "foobar2-1",
        "bar2":  "foobar2-2",
        "bar3":  "foobar2-3"
    }
]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-10
    • 1970-01-01
    • 1970-01-01
    • 2016-08-25
    • 2016-04-19
    • 2020-12-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多