Длина нулевого размера для объекта json в Python

Я не уверен, почему это произошло, в моем файле json нулевая длина.

0

Я не должен быть таким,

1000

Я боюсь, что comma после каждого объекта json вызывает эту проблему. (мой текущий формат json)

{ A:"A"},{ B:"B"),...

Правильный способ такой

{ A:"A"} { B:"B"),...

Итак, как я могу рассчитать всю длину, не удаляя comma?

Мой код

import json

githubusers_data_path = 'githubusers.json'

githubusers_data = []
githubusers_file = open(githubusers_data_path, "r")
for line in githubusers_file:
    try:
        data = json.loads(line)
        githubusers_data.append(data)
    except:
        continue

print len(githubusers_data)

Образец

{
    "login": "datomnurdin"
}, {
    "login": "ejamesc"
},...

person Mohammad Nurdin    schedule 25.11.2015    source источник
comment
Я понятия не имею, что вы пытаетесь сделать, но ваш код не работает на data = json.loads(line). Это связано с тем, что вы читаете файл построчно, и ни одна из строк {, "login": "datomnurdin", }, { и т. д. не является допустимым JSON. Я полагаю, вы хотели сделать data = json.load(githubusers_file) (обратите внимание на отсутствие s в load).   -  person freakish    schedule 25.11.2015
comment
Убедитесь, что ваш json действителен, пропустив его через валидатор.   -  person Kamehameha    schedule 25.11.2015
comment
@freakish Уже протестировал. еще 0 длина.   -  person Mohammad Nurdin    schedule 25.11.2015
comment
@Kamehameha Это действительно на 101%.   -  person Mohammad Nurdin    schedule 25.11.2015
comment
Образец json, который вы опубликовали, недействителен json. Я прогнал его через jsonlint.com (очевидно, удалил точки).   -  person Arnab Datta    schedule 25.11.2015
comment
@ArnabDatta Я не уверен, сарказм это или нет, «точка» показывает более двух объектов json. Надеюсь, ты это понимаешь.   -  person Mohammad Nurdin    schedule 25.11.2015
comment
@Dato'MohammadNurdin: нет, без сарказма. Валидатор утверждал, что это недействительный json. Я думаю, что для того, чтобы он был действительным json, вам нужен только один объект верхнего уровня, и если он в формате, который вы описали, то у вас есть более одного.   -  person Arnab Datta    schedule 25.11.2015
comment
В будущем используйте except Exception as e и печатайте e для получения информации в случае сбоя.   -  person Stian OK    schedule 25.11.2015


Ответы (2)


Я думаю, что вы получаете исключение, которое вы подавляете с помощью try-except, из-за запятых. Одним из решений было бы сначала преобразовать ваш файл в строку, вставить '[' и ']' вокруг строки, чтобы преобразовать ее в допустимый формат json, а затем использовать json.loads для преобразования строки.

import json

githubusers_data_path = 'githubusers.json'

githubusers_file = open(githubusers_data_path, "r")
githubusers_string = ''.join(line for line in githubusers_file)
githubusers_string = '[{}]'.format(githubusers_string)
githubusers_data = json.loads(githubusers_string)

print len(githubusers_data)
githubusers_file.close()
person zehnpaard    schedule 25.11.2015

в вашем коде есть исключение:

import json

githubusers_data_path = 'githubusers.json'

githubusers_data = []
githubusers_file = open(githubusers_data_path, "r")
for line in githubusers_file:
    try:
        data = json.load(githubusers_file) # exception from here
        githubusers_data.append(data)
    except Exception, e:
        print e

print len(githubusers_data) # so githubusers_data is always []

Смешивание методов итерации и чтения приведет к потере данных

person FelixHo    schedule 25.11.2015
comment
ваше предложение, которое я получил, итерация смешивания и методы чтения потеряют сообщение об ошибке данных. но длина по-прежнему 0. - person Mohammad Nurdin; 25.11.2015