如何将这个unicode转换为字典?
抱歉,我完全忘了提到我在用Python。让我再试一次。
我正在用Python来获取一个网络服务,它返回以下的JSON数据:
{
"results" : [
{
"paramName" : "output",
"dataType" : "GPString",
"value" : "{'city': 'Falls Church', 'isRuralArea': False, 'zip': '22046', 'isNotInBTOPLMArea': True, 'longitude': '-77.186180', 'isGeocodable': True, 'county': u'Falls Church', 'isNotInBIPLMArea': True, 'state': 'VA', 'isLatLongInUSBounds': True, 'address': '604 Jackson St', 'latitude': '38.884937'}"
}
],
"messages" : [
]
}
以下是我在获取和解析数据时用到的代码片段:
import urllib
import httplib2
import json
import simplejson
http = httplib2.Http()
headers, response = http.request(url, 'GET')
if headers['status'] == "200":
responseAsJson = simplejson.loads(response)
print "response = " + repr(responseAsJson)
results = responseAsJson['results'][0]['value']
不幸的是,这让我得到的results的值是这样的(在PyScripter调试器的变量窗口中显示):
u"{'city': 'Falls Church', 'isRuralArea': False, 'zip': '22046', 'isNotInBTOPLMArea': True, 'longitude': '-77.186180', 'isGeocodable': True, 'county': u'Falls Church', 'isNotInBIPLMArea': True, 'state': 'VA', 'isLatLongInUSBounds': True, 'address': '604 Jackson St', 'latitude': '38.884937'}"
我不知道怎么才能访问address或city这些键,比如说。
你能告诉我我哪里做错了吗?怎么修复呢?
谢谢,
Jamie
我问题的旧版本(过时):
这是我正在解析的JSON数据:
response = {u'messages': [], u'results': [{u'dataType': u'GPString', u'value': u"{'city': 'Falls Church', 'isRuralArea': False, 'zip': '22046', 'isNotInBTOPLMArea': True, 'longitude': '-77.186180', 'isGeocodable': True, 'county': u'Falls Church', 'isNotInBIPLMArea': True, 'state': 'VA', 'isLatLongInUSBounds': True, 'address': '604 Jackson St', 'latitude': '38.884937'}", u'paramName': u'output'}]}
我已经深入到这个节点,它的类型是“unicode”。我该如何把它变成一个字典呢?我觉得它是unicode类型可能阻止我创建字典或访问它的键,但我不太确定。
u"{'city': 'Falls Church', 'isRuralArea': False, 'zip': '22046', 'isNotInBTOPLMArea': True, 'longitude': '-77.186180', 'isGeocodable': True, 'county': u'Falls Church', 'isNotInBIPLMArea': True, 'state': 'VA', 'isLatLongInUSBounds': True, 'address': '604 Jackson St', 'latitude': '38.884937'}"
谢谢,
Jamie
2 个回答
0
这不是一个完整的答案,因为很难知道你具体想要什么。不过,可以从修正你的JSON字符串开始。
以下是你可能想要的JSON格式:
{'messages': [], 'results': [{'dataType': 'GPString', 'value': {'city': 'Falls Church', 'isRuralArea': False, 'zip': '22046', 'isNotInBTOPLMArea': True, 'longitude': '-77.186180', 'isGeocodable': True, 'county': 'Falls Church', 'isNotInBIPLMArea': True, 'state': 'VA', 'isLatLongInUSBounds': True, 'address': '604 Jackson St', 'latitude': '38.884937'}, 'paramName': 'output'}]}
我把几个属性名称前面的u
去掉了,还把第一个属性名为'value'
的周围的"
去掉了。
关于你最初的问题,我们需要更多的细节。请把你的代码和你使用的语言/平台发出来。根据你评论中提到的responseAsJson()
,你是在使用ASP.NET的RadAjax吗? http://www.telerik.com/help/aspnet/ajax/ajxsimplewebserviceinvocation.html
请不要在这里回复,而是把这些信息编辑到你的帖子里。
2
因为你的 results
对象看起来像是一个字符串或unicode格式的字典,所以你需要对它进行评估。一个安全的方法(从Python 2.6开始)是使用 ast.literal_eval 函数:
results = ast.literal_eval(responseAsJson['results'][0]['value'])