2

次のように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の個々のコンポーネントをトークン化する必要がありますが、それを支援できるライブラリはありますか?

ありがとう

4

2 に答える 2

3

したがって、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
于 2012-08-09T21:35:05.050 に答える
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'}}

そして、URLの「somefile」部分だけを取得するには:

url.split('/')[url.count('/')]
于 2012-08-09T21:42:48.747 に答える