0

私はこの文字列(JSON値を表す)を持っています:

BABEL_JSON = "{
    'BD': u'Bangladesh', 
    'WF': u'Wallis y Futuna', 
    'BF': u'Burkina Faso'
}"

そして、次のような List オブジェクトに変換する必要があります。

BABEL_LIST = [
    ("BD", u"Bangladesh"),
    ("WF", u"Wallis y Futuna"),
    ("BF", u"Burkina Faso")
]

最善の方法は何ですか?まず、私が試した:

import json
BABEL_LIST = json.loads(str(BABEL_JSON))

しかし、私はこのエラーがあります:

TypeError: 'NoneType' object is not callable
4

5 に答える 5

3

コンテンツは有効な JSON ではなく、文字列としての python 辞書であるため、リテラル eval を使用する必要があります。

リテラル eval は、有効な python オブジェクトを安全に評価します。

import ast


BABEL_JSON = """{                                                               
    'BD': u'Bangladesh',                                                        
    'WF': u'Wallis y Futuna',                                                   
    'BF': u'Burkina Faso'                                                       
}"""

myDict = ast.literal_eval(BABEL_JSON)
print(myDict.items())
于 2012-10-08T06:13:46.750 に答える
1

有効な json 文字列がありません。json では、文字列は で記述され"ます。文字列のu前も許可されていません。最初の json のような文字列を有効なものに変換する必要があります。

import json
BABEL_JSON ="""{
    'BD': u'Bangladesh', 
    'WF': u'Wallis y Futuna', 
    'BF': u'Burkina Faso'
}"""
s = BABEL_JSON.replace(": u", ": ").replace("'", '"')
print json.loads(s).items()

http://ideone.com/OxPmlを参照

于 2012-10-08T06:13:18.717 に答える
1
import json
a = json.loads(l)
zip(a.keys(),a.values())

別の方法

import ast
a = ast.literal_eval(l)
zip(a.keys(),a.values())
于 2012-10-08T06:14:35.753 に答える
0

それは私が見つけた最善かつ最速の方法です

BABEL_JSON = "{
    'BD': u'Bangladesh', 
    'WF': u'Wallis y Futuna', 
    'BF': u'Burkina Faso'
}"

BABEL_LIST = [(key, countries[key]) for key in BABEL_JSON]

そして、それらを名前で並べ替えたい場合。

BABEL_LIST.sort(key=lambda tup: tup[1])
于 2012-12-30T09:16:50.247 に答える
0

または、次のように正規表現を使用します。

import re

BABEL_JSON = """{
    'BD': u'Bangladesh', 
    'WF': u'Wallis y Futuna', 
    'BF': u'Burkina Faso'
}"""

print re.findall(r"'([^']+)': u'([^']+)'", BABEL_JSON)

出力:

[('BD', 'Bangladesh'), ('WF', 'Wallis y Futuna'), ('BF', 'Burkina Faso')]
于 2012-10-08T06:46:53.240 に答える