Python封装JSON字符串并解决单引号与中文编码问题
本文详解在Python Web服务中如何正确封装JSON格式字符串。针对将数组数据转为字符串后使用json.dumps产生的单引号及中文Unicode编码问题,通过指定ensure_ascii=False参数,实现生成符合标准的JSON字符串,确保数据交互的兼容性与可读性。
Python JSON数据交互背景
在基于Python构建Web服务时,系统间的数据交互是常见需求。目前业界普遍采用JSON格式进行数据传递,接收方获取符合标准的JSON数据后,能够更高效地进行解析与处理。
本文介绍一个具体场景:需要将三个数组类型的数据封装为JSON字符串,并发送给消费端。这三个数组类型的数据内容如下:
原始数据与字符串封装过程
print(boxes)
print(scores)
print(txts)
#以下是打印结果
#第一个:
[array([[292., 294.],
[331., 293.],
[349., 848.],
[309., 850.]], dtype=float32), array([[339., 299.],
[378., 298.],
[392., 660.],
[353., 662.]], dtype=float32)]
#第二个:
[0.9401206, 0.8182683]
#第三个:
['土地整治与土壤修复研究中心', '华南农业大学丨东图']首先,将这些数据转换为字符串格式,处理逻辑如下:
txts_str = ""
for i in range(len(txts)):
if (len(txts_str) == 0):
txts_str = str(txts[i])
else:
#因为是字符串句子,选一个不常用的符号“|”做间隔
txts_str = txts_str + "|" + str(txts[i])
txt_scores = ""
for i in range(len(scores)):
if(len(txt_scores) == 0):
txt_scores = str(scores[i])
else:
txt_scores = txt_scores + "|" + str(scores[i])
txt_boxes = ""
for i in range(len(boxes)):
for j in range(len(boxes[i])):
for k in range(len(boxes[i][j])):
if (len(txt_boxes) == 0):
txt_boxes = str(boxes[i][j][k])
else:
txt_boxes = txt_boxes + "," + str(boxes[i][j][k])
#打印一下
print(txt_boxes)
print(txts_str)
print(txt_scores)
#打印结果:
#292.0,294.0,331.0,293.0,349.0,848.0,309.0,850.0,339.0,299.0,378.0,298.0,392.0,660.0,353.0,662.0
#土地整治与土壤修复研究中心|华南农业大学丨东图
#0.9401206|0.8182683接着,将转换后的字符串数据封装为JSON对象:
#然后封装成json:
result_data = {"txt_boxes": txt_boxes, "txts": txts, "txt_scores": txt_scores}此时直接输出结果,会发现使用的是单引号格式,这不符合标准JSON规范(标准JSON要求使用双引号):
#{'txt_boxes': '292.0,294.0,331.0,293.0,349.0,848.0,309.0,850.0,339.0,299.0,378.0,298.0,392.0,660.0,353.0,662.0', 'txts': ['土地整治与土壤修复研究中心', '华南农业大学丨东图'], 'txt_scor
es': '0.9401206|0.8182683'}为了修正引号问题,我们需要对字符串进行转换处理:
JSON序列化中的引号与编码问题
json.dumps(result_data)然而,直接使用json.dumps处理后,发现中文字符显示异常,变成了Unicode编码字符串:
#{"txt_boxes": "292.0,294.0,331.0,293.0,349.0,848.0,309.0,850.0,339.0,299.0,378.0,298.0,392.0,660.0,353.0,662.0", "txts": "\u571f\u5730\u6574\u6cbb\u4e0e\u571f\u58e4\u4fee\u590d\u7814\u7a76\u4e2d\u5fc3|\u534e\u5357\u519c\u4e1a\u5927\u5b66\u4e28\u4e1c\u56fe", "txt_scores": "0.9401206|0.8182683"}出现该现象的原因是json.dumps在序列化时默认使用ASCII编码。若要输出真正的中文字符,必须显式指定ensure_ascii=False参数:
解决中文编码的标准方案
json.dumps(result_data,ensure_ascii=False)最终结果生成了符合预期的标准JSON格式字符串:
#{"txt_boxes": "292.0,294.0,331.0,293.0,349.0,848.0,309.0,850.0,339.0,299.0,378.0,298.0,392.0,660.0,353.0,662.0", "txts": ["土地整治与土壤修复研究中心|华南农业大学丨东图"], "txt_scores": "0.9401206|0.8182683"}至此,完成了关于Python封装JSON格式字符串及处理单双引号、中文编码问题的完整介绍。如需了解更多Python封装JSON的相关内容,建议查阅本站过往文章或继续浏览后续教程,感谢大家的支持。
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













