Правильно читать JSON файл - PullRequest
0 голосов
/ 17 июня 2020

Я пытаюсь прочитать файл JSON (набор данных BioRelEx: https://github.com/YerevaNN/BioRelEx/releases/tag/1.0alpha7) в Python. Файл JSON представляет собой список объектов, по одному на предложение. Вот как я пытаюсь это сделать:

 def _read(self, file_path):
        with open(cached_path(file_path), "r") as data_file:
            for line in data_file.readlines():
                if not line:
                    continue
                 items = json.loads(lines)
                 text = items["text"]
                 label = items.get("label")

Мой код не работает на items = json.loads(line). Похоже, что данные отформатированы не так, как ожидает код, но как я могу это изменить?

Заранее спасибо за уделенное время!

С уважением,

Юля

Ответы [ 2 ]

1 голос
/ 17 июня 2020

С json.load() вам не нужно читать каждую строку, вы можете сделать одно из этих:

import json

def open_json(path):
    with open(path, 'r') as file:
        return json.load(file)

data = open_json('./1.0alpha7.dev.json')

Или, что еще круче, вы можете GET запросить json из GitHub

import json
import requests

url = 'https://github.com/YerevaNN/BioRelEx/releases/download/1.0alpha7/1.0alpha7.dev.json'
response = requests.get(url)
data = response.json()

Они оба дадут одинаковый результат. Переменная data будет списком словарей, которые вы можете перебирать в for l oop и выполнять дальнейшую обработку.

0 голосов
/ 17 июня 2020

Ваш код читает одну строку за раз и анализирует каждую строку отдельно как JSON. Если создатель файла не создал файл в этом формате (который, учитывая, что он имеет расширение. json, маловероятно), это не сработает, поскольку JSON не использует разрывы строк для обозначения конца объекта.

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

def _read(self, file_path):
    with open(cached_path(file_path), "r") as data_file:
        data = json.load(data_file)
    for item in data:
        text = item["text"]

метка, по-видимому, скрыта в элементе ["взаимодействие"]

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...