2017-05-26 734 views
0

我收到的位置的名单是这样处理来自JSON响应

region_response = json.loads(requests.get(region_req_url).text) 

很多名字都字符表示像响应,在那个地方的名字是Torö StenstrandTor\u00f6 Stenstrand转义Unicode字符。

然后我加入一些接收元素的字典和保存该到一个新的JSON文件

with open('spots.json', 'w') as wf: 
    json.dump(results, wf, skipkeys=False, ensure_ascii=True, indent=4) 

生成的文件也有转义字符像\u00f6但我需要这种有实际表示形式如ö

我的工作到目前为止在this repo,特别是在magicseaweed.pywindguru.py

如果之前已经回答了这个问题,或者我的描述/假设不正确,我已经表示歉意 - 我一直在尝试解决这个问题很长一段时间了,但我不认为我理解这个区域足够了解正是我应该寻找或阅读的内容!任何帮助/建议/指针将大量赞赏。

回答

0

得到这个工作:)首先我加编码到json.loads ...

response = requests.get(region_req_url) 
response = requests.utils.get_unicode_from_response(response) 
region_response = json.loads(response, encoding='utf-8') 

然后在尝试上面的Sijan的答案后,我得到错误(显示在通信ent),并试图修复错误时,我遇到了this answer,并且该解决方案已工作。因此,要写信给我的JSON文件我做...

with io.open("results.json",'w', encoding="utf-8") as outfile: 
    outfile.write(unicode(json.dumps(results, ensure_ascii=False, indent=4))) 

现在地名像Torö Stenstrand写入JSON文件。

0

我曾经解决io模块这个问题如下

import io 
j = {'d': '中', 'e': 'a'} 
with io.open('myfile.json', 'w', encoding='utf8') as json_file: 
    json.dumps(j, json_file, ensure_ascii=False) 

输出:

{"d": "中", "e": "a"}' 
+0

谢谢你的回答!我得到一个错误,因为我的字典包含的字符串不是unicode TypeError:必须是unicode,而不是str,所以像\ u00f6这样的转义字符是字符串格式,需要转换为unicode。我尝试过'unidict = {k.decode('utf8'):v.decode('utf8')for k,v in results.items()}'from this answer](https:// stackoverflow .com/questions/16705274 /最快的方式来转换一个字典键值从字符串到Unicode),但得到错误AttributeError:'字典'对象没有属性'解码',所以我想我在这里错过了一些东西。 – Cian