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

您需要使用文字 eval,因为您的内容不是有效的 JSON,它是作为字符串的 python 字典。

文字 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

或者像这样使用正则表达式:

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 回答
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 回答