首页 > 解决方案 > 使用 Python 读取 JSON 文件

问题描述

我有一个名为“elements.json”的 JSON 文件:

[
{ldraw="003238a",lgeo="003238a",slope=0,anton=0,lutz=0,owen=0,damien=0},
{ldraw="003238b",lgeo="003238b",slope=0,anton=0,lutz=0,owen=0,damien=0},
{ldraw="003238c",lgeo="003238c",slope=0,anton=0,lutz=0,owen=0,damien=0},
{ldraw="003238d",lgeo="003238d",slope=0,anton=0,lutz=0,owen=0,damien=0}
]

我有一个名为“test.py”的 Python 文件:

import json

with open('elements.json') as json_file:  
    data = json.load(json_file)
    for p in data:
        print('ldraw: ' + p['ldraw'])
        print('lgeo: ' + p['lgeo'])

从 Windows 命令行运行我收到此错误:

Traceback (most recent call last):
  File "test.py", line 4, in <module>
    data = json.load(json_file)
  File "C:\Python27\lib\json\__init__.py", line 278, in load
    **kw)
  File "C:\Python27\lib\json\__init__.py", line 326, in loads
    return _default_decoder.decode(s)
  File "C:\Python27\lib\json\decoder.py", line 366, in decode
    obj, end = self.raw_decode(s, idx=_w(s, 0).end())
  File "C:\Python27\lib\json\decoder.py", line 382, in raw_decode
    obj, end = self.scan_once(s, idx)
ValueError: Expecting property name: line 2 column 2 (char 3)

预期的属性名称是什么?为什么我会收到错误消息?

标签: pythonjson

解决方案


您没有遵循 JSON 规范。有关详细信息,请参阅json.org

[
  {"ldraw":"003238a","lgeo":"003238a","slope":0,"anton":0,"lutz":0,"owen":0,"damien":0},
  {"ldraw":"003238b","lgeo":"003238b","slope":0,"anton":0,"lutz":0,"owen":0,"damien":0},
  {"ldraw":"003238c","lgeo":"003238c","slope":0,"anton":0,"lutz":0,"owen":0,"damien":0},
  {"ldraw":"003238d","lgeo":"003238d","slope":0,"anton":0,"lutz":0,"owen":0,"damien":0}
]

您的 Python 代码是正确的。


您的ldrawlgeo看起来像十六进制;JSON 不支持十六进制,你必须自己做额外的工作。
[编辑:他们不是]


推荐阅读