抱歉,我完全忽略了提到我正在使用Python。让我再试一次。
我正在使用Python来使用返回以下JSON的Web服务:
{
"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']
不幸的是,这给我留下了结果的以下值(如PyScripter Debugger的Variables窗口中所报告的那样):
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'}"
我不知道如何访问地址或 city 键。例如。
你能说出我做错了什么,以及如何解决它?
谢谢, 杰米
我的问题的旧版本(已废弃):
这是我正在解析的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'}"
谢谢, 杰米
答案 0 :(得分:2)
由于您的results
对象看起来像dict的字符串/ unicode版本,因此您需要对其进行评估。一种安全的方法(从Python 2.6开始)将使用ast.literal_eval函数:
results = ast.literal_eval(responseAsJson['results'][0]['value'])
答案 1 :(得分: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()
进行猜测,您是否在使用RadAjax for ASP.NET? http://www.telerik.com/help/aspnet/ajax/ajxsimplewebserviceinvocation.html
请勿在此处回复,而是将其编辑到您的帖子中。