2011-11-02 135 views
3

對不起,我完全忽略提及我正在使用Python。讓我再試一次。如何將此unicode轉換爲字典?

我使用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調試器的變量窗口中報告)的以下值:

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:我鑽下去

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

這不是合法的JSON字符串。我懷疑你正在使用不在標籤列表中的語言。你在開發什麼,DBMS是什麼? –

+0

我創建了一個服務(在ArcGIS Geoprocessing Services中),它返回了一些令人尊敬的JSON: ** {「results」:[{「paramName」:「output」,「dataType」:「GPString」,「value」:「 {'city':'Falls Church','isRuralArea':False,'zip':'22046','isNotInBTOPLMArea':是的,'經度':'-77.186180','isGeocodable':True,'county':u 'Falls Church','isNotInBIPLMArea':True,'state':'VA','isLatLongInUSBounds':True,'address':'604 Jackson St','latitude':'38 .884937'}「}},」messages「 :[]} ** 我得到了** header,response = http.request(url,'GET')**然後** responseAsJson = simplejson.loads(response)** –

+0

是的。服務中的JSON是合法的,但原始帖子中的JSON不是。如果您從每個屬性名稱的前面刪除了'u',則這是合法的。 –

回答

2

由於你results物體看起來像字典的字符串/ Unicode版本,你需要EVAL它。這樣做的一種安全方式(自Python 2.6開始)將使用ast.literal_eval函數:

results = ast.literal_eval(responseAsJson['results'][0]['value']) 
+0

是的,這工作,謝謝! _results_在評估後成爲字典。 –

+2

你不應該這樣做。您應該修復服務器中的JSON導出器。 – jterrace

+0

嗨jterrace,你會看到(在我原來的職位的第一個代碼塊)服務器返回正確的JSON。直到我開始用Python解析事情,最終我得到了一個Python字典的unicode表示。我仍然不確定爲什麼發生這種情況,但它肯定發生在客戶端 - 而不是服務器端。 –

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

不要在這裏作出迴應,而是將其修改成您的帖子。