提问人:Robert Alexander 提问时间:2/8/2023 更新时间:2/8/2023 访问量:367
Python:带有 ensure_ascii=False 和 encoding('utf-8') 的 json.dumps 似乎将字符串转换为字节 [duplicate]
Python: json.dumps with ensure_ascii=False and encoding('utf-8') seems to convert string to bytes [duplicate]
问:
我正在生成一个 Python 字典,如下所示:
placedict = {
"id": geonames.geonames_id,
"info": json.dumps(jsoninfo),
}
其中 id 是一个字符串,info 是一个有效且可读的 JSON 字符串:
'{"geonamesurl": "http://geonames.org/310859/kahramanmara\\u015f.html", "searchstring": "Kahramanmara\\u015f", "place": "Kahramanmara\\u015f", "confidence": 1, "typecode": "PPLA", "toponym": "Kahramanmara\\u015f", "geoid": 310859, "continent": "AS", "country": "Turkey", "state": "Kahramanmara\\u015f", "region": "Kahramanmara\\u015f", "lat": "37.5847", "long": "36.92641", "population": 376045, "bbox": {"northeast": [37.66426194452945, 37.02690583904019], "southwest": [37.50514805547055, 36.825904160959816]}, "timezone": "Europe/Istanbul", "wikipedia": "en.wikipedia.org/wiki/Kahramanmara%C5%9F", "hyerlist": ["part-of: Earth GeoID: 6295630 GeoCode: AREA", "part-of: Asia GeoID: 6255147 GeoCode: CONT", "part-of: Turkey GeoID: 298795 GeoCode: PCLI", "part-of: Kahramanmara\\u015f GeoID: 310858 GeoCode: ADM1", "part-of: Kahramanmara\\u015f GeoID: 310859 GeoCode: PPLA"], "childlist": ["Aksu", "Barbaros", "Egemenlik"]}'
但是正如你所看到的,虽然 jsoninfo 变量保存有效的 UTF-8 字符,但 placedict['info'] 字符不是 UTF-8 编码的,而是转义的。 因此,我尝试将 json.dumps 行更改为:
placedict = {
"id": geonames.geonames_id,
"info": json.dumps(jsoninfo).encode("utf-8"),
}
甚至
placedict = {
"id": geonames.geonames_id,
"info": json.dumps(jsoninfo, ensure_ascii=False).encode("utf-8"),
}
希望这将根据需要对 JSON 进行编码,但我看到在进行任何这些修改后,字典的“info”成员返回为 b'.........'因此在 MongoDB 中找到一个二进制字符串。
我想在 MongoDB 中使用 utf-8 编码的可读 JSON 字符串存储字典。
我在哪里犯了错误?
答:
2赞
Daweo
2/8/2023
#1
您可以只使用 json.dumps 和 ensure_ascii=False
import json
jsoninfo = {"El":"Niño"}
info = json.dumps(jsoninfo, ensure_ascii=False)
print(info) # {"El": "Niño"}
评论
0赞
Robert Alexander
2/8/2023
非常感谢伙计们,我没有尝试过:) @deceze非常感谢你在上面的评论中说了同样的话!
评论
.encode(...)
ensure_ascii=False