如何将这个unicode变成dict?

时间:2011-11-02 18:34:07

标签: python json unicode

抱歉,我完全忽略了提到我正在使用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'}"

谢谢, 杰米

2 个答案:

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

请勿在此处回复,而是将其编辑到您的帖子中。