我有一个配置文件,我试图拆开然后重新组装更新的部分。配置文件采用json格式,我试图在插入另一个json文件之前将其组件提取出来进行更新。
我发现的问题是JSON文件的各个部分使用"\/"
,当使用python的JSON库解码时,我得到"/"
。我将更新的值重新插入新的JSON文件后,我需要忠实地表示原始JSON,因此我需要缺少"\/"
。
我怀疑\
被解释为转义并被JSON解码器删除。
以下是我目前的努力样本:
JSON字符串示例:
{"Markup\/0.xaml":"text\/xml; charset=utf-8; format=xml; clrtype=ESRI.ArcGIS.Client.Graphic","Markup\/1.xaml":"text\/xml; charset=utf-8; format=xml; clrtype=ESRI.ArcGIS.Client.Graphic"}
Python代码:
import json
with open(full_json_path_old, 'r+') as fo:
data = json.load(fo)
print "DECODED STRING - ", data
打印结果:
u'Markup/0.xaml': u'text/xml; charset=utf-8; format=xml; clrtype=ESRI.ArcGIS.Client.Graphic',
u'Markup/1.xaml': u'text/xml; charset=utf-8; format=xml; clrtype=ESRI.ArcGIS.Client.Graphic'
答案 0 :(得分:0)
是的,\
反斜杠是一个转义字符,一个合适的JSON解码器会将这样的字符作为转义。 Python JSON解码器也不例外。见section 7 of RFC 7159:
任何角色都可能被转义。
和
char = unescaped / escape ( %x22 / ; " quotation mark U+0022 %x5C / ; \ reverse solidus U+005C %x2F / ; / solidus U+002F %x62 / ; b backspace U+0008 %x66 / ; f form feed U+000C %x6E / ; n line feed U+000A %x72 / ; r carriage return U+000D %x74 / ; t tab U+0009 %x75 4HEXDIG ) ; uXXXX U+XXXX escape = %x5C ; \
(所以\/
序列是 escape solidus 序列。)
您的输出正确;因为我希望mimetype组件如text
和xml
由正斜杠分隔,而不是\/
分隔。
正斜杠(标准中的固相)不会 进行转义。第7节说明必须转义的字符:
所有Unicode字符都可以放在 引号,必须转义的字符除外: 引号,反向实线和控制字符(U + 0000 通过U + 001F)。
因此,Python JSON编码器在生成JSON输出时不会转义正斜杠。