用Python读取JSON文件

2024-06-16 11:17:47 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个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}
]

我有一个Python文件叫做'测试.py':

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)

需要什么属性名?为什么我会出错?你知道吗


Tags: inpyjsonliblineslopefilepython27
3条回答

您没有遵循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不支持十六进制,你必须自己做额外的工作。
[编辑:它们不是]

您的JSON格式无效,JSON代表JavaScript对象表示法,就像JavaScript对象一样。因此,您应该将“=”替换为“:”。它意味着键值对。你知道吗

错误:

ldraw="003238a"
ldraw: 003238a // if no quote, the value should be the digit only.

右:

ldraw: "003238a"
ldraw: { "example-key": "value" }
ldraw: "True"

你的档案元素.json不是有效的json文件。 应该是这样的-

[{"ldraw":"003238a","lgeo":"003238a"}]

相关问题 更多 >