Обработка экранированных строк URL в JSON с использованием Python

Я получаю доступ к сервису, который возвращает 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, предварительно обработанной с помощью escape-символов? Нужно ли мне писать свой собственный url-кодировщик, который удалит escape-символы из строки url?

Кроме того, мне нужно было бы токенизировать отдельные компоненты URL, чтобы перейти к части "файл", есть ли библиотеки, которые могут помочь с этим?

Спасибо

2 ответа

Решение

В вашем примере JSON не нужна запятая после пары "c_url" kv.

>>> 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'}}

И чтобы получить только часть файла somefile:

url.split('/')[url.count('/')]

Итак, согласно 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
Другие вопросы по тегам