2016-11-29 42 views
2

我很难尝试从import.io加载API响应到文件或列表中。使用Python从import.io加载JSON行问题

我使用的是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读取我从其他来源做的工作很好,除了这一个。基于评论

编辑:

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

等一下,什么?您的输出看起来像您(或他们)添加了API内容的'repr()',因此JSON行编码为Python文字。 'print repr(open(temporary_json_file_path).read(300))'看起来像什么? –

+0

在问题中增加了编辑 – johan855

+0

是的,数据是* double-encoded *。这看起来像import.io端的错误。他们的拼抢工作如何?你写了一些代码?如果是这样,请不要将编码转换为JSON,因为它看起来像输出自动以JSON编码。 –

回答

5

你必须在你的代码,你是双编码的错误:

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

尝试:

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

我不知道我是如何错过的。我删除了我的错误答案。 –

+0

让我试试看 – johan855