如何将这个unicode转换为字典?

3 投票
2 回答
4525 浏览
提问于 2025-04-17 05:31

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

我不知道怎么才能访问addresscity这些键,比如说。

你能告诉我我哪里做错了吗?怎么修复呢?

谢谢,
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'])

撰写回答