繁体   English   中英

如何读取没有 [] 的 .json 文件?

[英]How do I read a .json file that doesn't have [ ]?

我在 Python 中有一个 .json 文件,如下所示:

  {
    "abc_id": "ABC-2019-1945",
    "def_id": "20"
  },
  {
    "abc_id": "ABC-2019-1944",
    "def_id": "200"
  }

我正在尝试使用json.load(open(json_path,"r"))读取它json.load(open(json_path,"r"))但它给了我一个错误,因为它有多个 .json 对象。

看起来只需在文件开头添加[]就可以解决问题,但我不知道如何向文件中添加任何我无法读取的内容(为每个文件手动添加是对我来说是一个糟糕的解决方案)。 我也尝试将文件作为文本文件读取,但我不知道如何将 .json 作为文本读取。

任何人都可以为我的问题建议一个好的解决方案吗?

错误是因为 JSON 无效,不仅因为缺少 [],还因为每个条目中 def_id 键末尾的逗号是错误的。 每个对象中的最后一个元素不得以逗号结尾。

您可以通过https://jsonlint.com/运行它进行检查。

有效的

json.loads('[{"abc_id": "ABC-2019-1945", "def_id": "20"}, {"abc_id": "ABC-2019-1944", "def_id": "200"}]')

由于多余的逗号而无效

json.loads('[{"abc_id": "ABC-2019-1945", "def_id": "20",}, {"abc_id": "ABC-2019-1944", "def_id": "200",}]')

所以原始的JSON需要是这个

[
    {
        "abc_id": "ABC-2019-1945",
        "def_id": "20"
    },
    {
        "abc_id": "ABC-2019-1944",
        "def_id": "200"
    }
]

** 更新 ** 现在问题已修改为包含您可以使用的有效 JSON

with open(json_path,"r") as f:
    d = f.read()

json.loads(f"[{data}]")

# or
json.loads("[" + data + "]")

# or
json.loads("[%s]" % data)

# or
json.loads("[{}]" % data)

json模块提供了两种解析 JSON 对象的方法(同样适用于序列化):

  • json.load - 从文件对象中读取 JSON 字符串 <- 这是您默认使用的字符串。 你在这里不能做太多,除非你先打开文件,读取数据,添加括号并将其放回文件中。 然后你可以再次阅读它,它会被正确解析。 绝对不是处理这个问题的最好方法,但正如其他人评论的那样 - 最好在它被写入文件的地方修复它。 json.dump用于将序列化对象写入文件。
  • json.loads - 's' 代表字符串,这意味着这个方法需要一个字符串作为输入。 json.dumps将作为字符串返回一个序列化的 JSON 对象。

这是最终的代码:

with open(json_path,"r") as f:
    data = f.read()

json.loads("["+data+"]")

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM