2016-12-02 4 views
0

У меня есть входной файл, который содержит последовательность (не обязательно список/кортеж и т. Д.) Элементов JSON.Чтение данных JSON в Python

Это образец данные:

{ 
      "candidate":[ 
       { 
        "id":"25624", 
        "name":"Clinton", 
        "affiliation":"Democrat", 
        "color":"", 
        "value":"46.8", 
        "status":"1" 
       }, 
       { 
        "id":"25623", 
        "name":"Trump", 
        "affiliation":"Republican", 
        "color":"", 
        "value":"43.6", 
        "status":"1" 
       } 
      ], 
      "date":"Tue, 08 Nov 2016 00:00:00 -0600" }, { 
      "candidate":[ 
       { 
        "id":"25624", 
        "name":"Clinton", 
        "affiliation":"Democrat", 
        "color":"", 
        "value":"47.0", 
        "status":"1" 
       }, 
       { 
        "id":"25623", 
        "name":"Trump", 
        "affiliation":"Republican", 
        "color":"", 
        "value":"43.8", 
        "status":"1" 
       } 
      ], 
      "date":"Mon, 07 Nov 2016 00:00:00 -0600" } 

Я пытаюсь использовать JSON библиотеку, которая может прочитать первый блок JSON, но заблуждается, когда чтение нескольких блоков.

Каков правильный способ чтения нескольких элементов JSON в Python.

Спасибо заранее!

+0

Создание их в виде массива объектов JSON? – bharadhwaj

+0

Есть ли способ конвертировать весь файл в массив объектов Json. Любые указатели были бы полезны – Abhi

ответ

0

Что вы хотели бы сделать, это создать функцию-генератор и воспользоваться преимуществами реализации json в Python. Вот мой рабочий пример с функцией генератора:

import json 
from splitstream import splitfile 

def generate_json(file_name): 
    for jsonstr in splitfile(open(file_name), format="json"): 
     yield json.loads(jsonstr) 

for item in generate_json('data.json'): 
    print item 

Однако, возможно, потребуется установить splitstream (через пип) и включают в себя генератор функции generate_json в вашем коде. Эта функция выполняет функцию yield (return) json каждый раз, когда она завершается.

+0

В вашей функции jsonstr возвращается как байты. json.loads не может обрабатывать байты, возвращает сообщение об ошибке: «Traceback (последний последний вызов): Файл« read_polls.py », строка 11, в для элемента в generate_json ('testData.json'): Файл «read_polls.py», строка 9, в generate_json yield json.loads (jsonstr) Файл «/Users/ayada/anaconda/lib/python3.5/json/__init__.py», строка 312, в нагрузках s .__ class __.__ name__)) TypeError: объект JSON должен быть str, а не 'bytes' " – Abhi

+0

Я хотел бы понять, какой тип jsonstr в вашей функции. Я использую Python 3.5 – Abhi

+0

str (jsonstr, 'utf-8'), cnverted bytes to String. Решение работало аккуратно. Благодаря!! – Abhi

Смежные вопросы