2016-11-29 1 views
2

У меня возникли трудности с загрузкой ответа API из import.io в файл или список.Проблема с JSON Line при загрузке из import.io с использованием Python

enpoint я использую https://data.import.io/extractor/{0}/json/latest?_apikey={1}

Раньше все мои сценарии были установлены, чтобы использовать обычный JSON и все работает хорошо, но теперь эй решили использовать JSon линию, но почему-то кажется уродливо.

Как я пытался адаптировать мои сценарии должен прочитать ответ API следующим образом:

url_call = 'https://data.import.io/extractor/{0}/json/latest?_apikey={1}'.format(extractors_row_dict['id'], auth_key) 
r = requests.get(url_call) 

with open(temporary_json_file_path, 'w') as outfile: 
    json.dump(r.content, outfile) 

data = [] 
with open(temporary_json_file_path) as f: 
    for line in f: 
     data.append(json.loads(line)) 

проблема делать это в том, что при проверке данных [0], все содержимое JSON файла был сброшен в нем ...

data[1] = IndexError: list index out of range 

Вот пример data[0][:300]:

u'{"url":"https://www.example.com/de/shop?condition[0]=new&page=1&lc=DE&l=de","result":{"extractorData":{"url":"https://www.example.com/de/shop?condition[0]=new&page=1&lc=DE&l=de","resourceId":"23455234","data":[{"group":[{"Brand":[{"text":"Brand","href":"https://www.example.com' 

У кого-нибудь есть опыт работы с этим API? Все остальные чтения jsonline, которые я делаю из других источников, работают отлично, кроме этого.

EDIT на основе комментариев:

print repr(open(temporary_json_file_path).read(300)) 

дает это:

'"{\\"url\\":\\"https://www.example.com/de/shop?condition[0]=new&page=1&lc=DE&l=de\\",\\"result\\":{\\"extractorData\\":{\\"url\\":\\"https://www.example.com/de/shop?condition[0]=new&page=1&lc=DE&l=de\\",\\"resourceId\\":\\"df8de15cede2e96fce5fe7e77180e848\\",\\"data\\":[{\\"group\\":[{\\"Brand\\":[{\\"text\\":\\"Bra' 
+0

Подождите, что? Ваш результат выглядит так, как вы (или они) добавили 'repr()' содержимого API, поэтому строки JSON закодированы как литерал Python. Что означает 'print repr (open (tempor_json_file_path) .read (300))' похоже? –

+0

Добавлено редактирование на вопрос – johan855

+0

Да, данные * с двойным кодированием *. Это выглядит как ошибка на стороне import.io. Как их скрежет? Вы пишете код? Если это так, не кодируйте JSON на их стороне, потому что похоже, что вывод автоматически закодирован JSON. –

ответ

5

У вас есть ошибка в вашем коде, где вы двойная кодировка:

with open(temporary_json_file_path, 'w') as outfile: 
    json.dump(r.content, outfile) 

Try:

with open(temporary_json_file_path, 'w') as outfile: 
    outfile.write(r.content) 
+2

Я не уверен, как я это пропустил. Я удалил свой неправильный ответ. –

+0

Позвольте мне попробовать – johan855