2015-11-29 3 views
0

У меня есть данные, которые выглядят как [["header","row"],["5","16"], ...] В случае, если они будут сохранены в файле, они могут быть легко прочитанчтения 2D массив из строки

with open(input_data, 'r') as f: 
    data = json.load(f) 

Должна быть обеспечена возможность читать их в data прямолинейно, но как-то входная строка не может быть преобразована в json data = json.loads(x)ValueError: No JSON object could be decoded

Что мне не хватает?

+0

'f.read()' vs. just 'f' -' json.load (f.read()) '. В настоящее время вы пытаетесь загрузить файл [File Object] (https://docs.python.org/2/library/stdtypes.html#bltin-file-objects), а не строку JSON из файла на диске. –

+0

Вам также необходимо убедиться, что ваши данные сохраняются в формате json. – sdsmith

+0

'json.load (x)' правильно, если 'x' является файловым объектом. 'json.loads (x)' следует использовать, если 'x' является строкой. --- В вашем примере кода отображается «load», но ваша ошибка показывает «load»; Который из них? –

ответ

0

Ошибка ValueError сообщает, что JSON недействителен. Исправьте JSON в файле или строке, и он будет загружаться должным образом.

Ваш код будет правильно загружаться в данные JSON из файла, если input_data - это имя файла.


json.load() против json.loads()

Обе эти функции будут обрабатывать JSON.

json.load() принимает файл как объект.

json.loads() принимает объект string или unicode.


JSON файл:

[["header","row"],["5","16"]] 

Этот код будет правильно прочитать выше JSON из файла:

input_data = 'json_file_name.json' 
with open(input_data, 'r') as f: 
    data = json.load(f) 
print(data) 

Это будет обрабатывать JSON, хранящийся в строке:

json_string = '[["header","row"],["5","16"]]' 
print(json.loads(json_string)) 
+0

У меня нет проблемы с файлом. Я не хочу использовать файл. Контент распознается как json, когда он находится в файле. Он не распознается как таковой, если это только строка ввода. Я не понимаю, почему. – cur4so

+0

Как указано в моем ответе, если содержимое JSON находится в строке, вы должны использовать 'json.loads()' с хвостом 's', а не' json.load() '. Если вы считаете, что строковое содержимое хорошо отформатировано, обновите свой вопрос, чтобы включить точный код python со строкой, содержащей JSON. Возможно, проблема форматирования. – Noah

+0

Я использую 'json.loads()' для строки и получаю ошибку. Строка imho не очень хорошо отформатирована json, но, находясь в файле, 'json.load()' способен обрабатывать ее – cur4so