API跨系统数据转存中json.dumps()双引号转义异常咨询
API转存时HTML内容的JSON转义异常
在将源API输出转存到目标API的过程中,遇到了HTML内容转义混乱的问题:源API返回的HTML包含双引号,用json.dumps()处理后出现异常,导致目标数据库拒绝更新。
相关代码及执行结果
updateProblemReport = [] # Get the new description description = getWrikeFieldData("description", taskID) # result: <p style="padding-left: 1.5em;">A paragraph.</p> description = json.dumps(description) # result: "<p style=\"padding-left: 1.5em;\">A paragraph.</p>" updateProblemReport.append({"attributes": { "DETAILS": description, "OBJECTID": problemReport.get_value('OBJECTID')}}) # result: {'attributes': {'DETAILS': '"<p style=\\"padding-left: 1.5em;\\"">A paragraph.</p>"', 'OBJECTID': 139}}
疑问
- 为何双引号被单引号包裹?
- 能否强制使用双引号以保留
json.dumps()生成的转义字符? - 为何最终结果出现双斜杠?
补充情况
若移除description = json.dumps(description)这一行,最终结果为:
{'attributes': {'DETAILS': '<p style="padding-left: 1.5em;">A paragraph.</p>', 'OBJECTID': 139}}
解答
1. 双引号被单引号包裹的原因
这是Python打印字典时的自动格式选择:当字符串本身包含双引号时,Python会用单引号包裹整个字符串,避免语法冲突。这只是控制台的显示方式,并非实际存储的内容格式。
2. 无需强制双引号,问题出在重复转义
你不需要强制使用双引号,反而不应该单独对description调用json.dumps()。因为当你把处理后的description放入字典,后续若要将整个updateProblemReport转成JSON发送给目标API时,会再次触发转义:第一次json.dumps(description)已将HTML转成带转义的JSON字符串,第二次对整个字典转义时,会把字符串里的\"再次转义成\\",最终导致内容混乱。
如果目标API需要的是原始HTML内容(作为字符串字段值),直接把未经过json.dumps()处理的description放入字典即可,后续对整个updateProblemReport调用一次json.dumps()就足够。
3. 双斜杠的来源
双斜杠是双重转义导致的:
- 第一次
json.dumps(description):将HTML里的"转成\",得到带转义的字符串。 - 当这个字符串被放入字典后,后续对整个字典执行
json.dumps()(或Python打印字典的字符串表示)时,会把字符串里的\再次转义成\\,同时保留原来的",最终变成\\"。
本质是你多做了一次不必要的转义操作,导致内容被转义了两次。
内容的提问来源于stack exchange,提问作者Roger Asbury
相关产品推荐
相关产品推荐

