У меня есть JSON-файл с именем 'elements.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 с именем 'test.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)

Какое имя собственности ожидается? Почему я получаю ошибку?

-2
posfan12 3 Июл 2019 в 06:28

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 правильный.


Ваши ldraw и lgeo значения выглядят как шестнадцатеричные; JSON не поддерживает hex, и вам придется выполнять дополнительную работу самостоятельно.
[Редактировать: это не так]

4
SIGSTACKFAULT 3 Июл 2019 в 03:47

Ваш файл elements.json не является допустимым файлом JSON. Это должно было выглядеть так -

[{"ldraw":"003238a","lgeo":"003238a"}]
1
Daga Arihant 3 Июл 2019 в 03:32

Ваш формат 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"
0
Le Khiem 3 Июл 2019 в 04:35