我正在访问一个返回 json 的服务,如下所示:
{
"A":"A value",
"B":{
"B1":"B1 value",
"B2":"B2 value"
},
"C":{
"c_url":"http://someurl:someport/somefolder/somefile",
}
}
我想做的是解析这个 json,并在键值对中获取文件夹的 url 和 somefile 部分。
因此,从本质上讲,在我的脚本处理完 json 后,它将在文件中以某种分隔的方式输出 url 和 somefile。
文件处理完上述提供的 json 后的输出将是:
url: http://someurl:someport/somefolder/somefile
file: somefile
我很确定 python 中有许多 json 解析器可以解析 json,但我如何处理已用转义字符预处理的 url 字符串?我是否需要编写自己的 url 编码器来从 url 字符串中删除转义字符?
此外,我需要标记 url 的各个组件才能进入"文件"部分,是否有任何库可以帮助解决这个问题?
谢谢
所以,按照 http://www.quora.com/Why-does-the-cjson-Python-module-not-correctly-unescape-reverse-solidus-solidus
simplejson
应该能够处理这种"错误"的转义算法。考虑:
#!/usr/bin/env python
import simplejson
print simplejson.loads('"http://someurl:someport/somefolder/somefile"')
请注意,simplejson
不是标准软件包,但可以通过 easy_install
安装。
示例输出:
[85][23:35:24] vlazarenko@alluminium (~/tests) > python unescape.py
http://someurl:someport/somefolder/somefile
您的示例 JSON 不需要"c_url"k-v 对后面的逗号。
>>> import json
>>> st = '{"A":"A value","B":{ "B1":"B1 value", "B2":"B2 value" },"C":{ "c
_url":"http://someurl:someport/somefolder/somefile" }}'
>>> json.loads(st)
{u'A': u'A value', u'C': {u'c_url': u'http://someurl:someport/somefolder/somefile'}, u'B': {u'B1': u
'B1 value', u'B2': u'B2 value'}}
并且要仅获取URL的"某个文件"部分:
url.split('/')[url.count('/')]