Ruby中如何通过to_json将哈希西里尔字母编码为Unicode转义序列?
解决西里尔字母转Unicode转义序列的问题
你遇到的问题其实是JSON序列化时对非ASCII字符的处理逻辑导致的,分两种常见场景来解决:
场景1:使用Python标准库json模块
如果你是用Python内置的json模块来序列化字典,只需要确保在调用dumps()时设置ensure_ascii=True(这个参数默认就是True,但显式声明更稳妥,避免之前的代码不小心修改过默认值):
import json payload = {'date': "30",'name': 'Тест','phone': "71234567890",'sum': "0",'offer_id': "1"} # 显式指定ensure_ascii=True,强制转义非ASCII字符 json_result = json.dumps(payload, ensure_ascii=True) print(json_result)
执行后输出的JSON就是你期望的格式:
{"date":"30","name":"\u0422\u0435\u0441\u0442","offer_id":"1","phone":"71234567890","sum":"0"}
场景2:使用Pandas的to_json()方法
如果你是通过Pandas的Series/DataFrame来调用to_json(),需要设置force_ascii=True参数(Pandas里对应的参数名是force_ascii,作用和json模块的ensure_ascii一致):
import pandas as pd payload = {'date': "30",'name': 'Тест','phone': "71234567890",'sum': "0",'offer_id': "1"} # 示例1:DataFrame转单个JSON对象 df = pd.DataFrame([payload]) json_result = df.to_json(orient='records')[1:-1] # 去掉数组的[]包裹 # 示例2:Series转JSON s = pd.Series(payload) json_result = s.to_json(force_ascii=True)
这样生成的JSON也会把西里尔字母转换成Unicode转义序列。
原理说明
当ensure_ascii(json模块)或force_ascii(Pandas)设为True时,序列化过程会自动将所有非ASCII字符替换为对应的\uXXXX格式的Unicode转义序列,这正好匹配你对接PHP API的要求。如果设为False,JSON会直接保留原Unicode字符,虽然符合JSON标准,但部分服务可能期望转义后的格式。
内容的提问来源于stack exchange,提问作者Олег Якунин
相关产品推荐
相关产品推荐

