【发布时间】:2011-11-02 18:34:07
【问题描述】:
抱歉,我完全忽略了我正在使用 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" : [
]
}
以下是我获取/解析代码中的重要 sn-ps:
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 键。
你能告诉我我做错了什么,以及如何解决它吗?
谢谢, 杰米
我的问题的旧版本(已过时):
这是我正在解析的 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”。我该如何做一个 dict 呢?我认为它是 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'}"
谢谢, 杰米
【问题讨论】:
-
这不是合法的 JSON 字符串。我怀疑您使用的语言不在标签列表中。你在开发什么,什么 DBMS?
-
我创建了一个服务(在 ArcGIS 地理处理服务中),它返回一些看起来不错的 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":[]} 我用 headers, response = http.request(url, 'GET') 然后 responseAsJson = simplejson.loads(回应)
-
是的。服务中的 JSON 是合法的,但原始帖子中的 JSON 不是。如果您从每个属性名称的前面删除了
u,那将是合法的。 -
是的,对不起,我的评论半响了。我还在中间... ...然后,我执行以下操作,这给出了我提到的“unicode”:results = responseAsJson['results'][0]['value' ] 你知道我做错了什么吗?
-
请发布您的代码。什么语言? Javascript?