Как мне превратить этот юникод в диктовку? - PullRequest
3 голосов
/ 02 ноября 2011

Извините, я полностью забыл упомянуть, что я использую 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']

К сожалению, это оставляет мне следующее значение для результатов (как сообщается в окне «Переменные отладчика 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 мешает мне создать диктовку или получить доступ к ее ключам, но я не уверен.

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 ]

2 голосов
/ 03 ноября 2011

Поскольку ваш results объект выглядит как строковая / юникодная версия dict, вам необходимо проверить его. Безопасный способ сделать это (начиная с Python 2.6) - использовать функцию ast.literal_eval :

results = ast.literal_eval(responseAsJson['results'][0]['value'])
0 голосов
/ 02 ноября 2011

Это не полный ответ, так как трудно сказать, чего вы хотите.Но для начала нужно исправить строку 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 для ASP.NET?http://www.telerik.com/help/aspnet/ajax/ajxsimplewebserviceinvocation.html

Не отвечайте здесь, а отредактируйте его в своем сообщении.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...