2015-12-15 2 views
0

Как я могу получить объект json, который находится внутри другого json? У меня есть URL-адрес, который возвращает объект JSON (сделанный в рубин), содержащий другой объект JSON в одном из значений, например:Получение json-объекта объекта json в python?

json = 
{"country":"canada", 
    "tours":"[ 
      {\"title\":\"Canadian Rockies Trail\",\"price\":\"$2249\"}, 
      {\"title\":\"2-Day Fantasy Island Getaway\",\"price\":\"$269\"} 
      ]"} 

Тогда, я хочу, чтобы получить объект в элементе «туры» который является еще одним json.

Я пробовал json.load(json)['tours'], который предоставляет мне данные в «турах», но в формате string, поэтому я не могу манипулировать данными. Есть ли какой-либо метод анализа, чтобы получить это как Json вместо строки?

Я хотел бы получить данные следующим образом:

Canadian Rockies Trail ; price $2249 

2-Day Fantasy Island Getaway; price $269 
+0

Вы говорите «сделано в рубине», поэтому вы можете что-то узнать о том, как этот JSON объект генерируется. Вы можете изменить формат JSON? Потому что этот JSON не имеет смысла. – user2357112

+0

То, что вы называете «объектом JSON», является просто строкой. Вы можете получить эту строку, а затем проанализировать ее как JSON, как и с любой другой строкой. – BrenBarn

ответ

0

Проблема, которую я вижу в том, что ваш json['tours'] является JSON строка в кодировке. Вы должны использовать json.loads(str), чтобы превратить это в словарь. Я бы сделал это на месте и получил доступ к нему.

См ниже код

import json 

foo ={"country":"canada", 
    "tours":"[{\"title\":\"Canadian Rockies Trail\",\"price\":\"$2249\"},{\"title\":\"2-Day Fantasy Island Getaway\",\"price\":\"$269\"}]"} 

foo['tours'] = json.loads(foo['tours']) # turn tours into dict 

for tour in foo['tours']: 
    print "tour name : {} :::: tour price: {}".format(tour['title'],tour['price']) # tour is a dict now. 
+0

Да! которые решают это! Спасибо, это было не сложно, но мой ум был заблокирован. XD –

+0

Бывает. Рад, что ты это понял. Счастливое кодирование – taesu

0

Вы должны назвать свою Dict нечто иное, чем JSON, потому что он будет конфликтовать с импортом. Предполагая, что это называется json_dict,

json.loads(json_dict['tours']) 

должен сделать это

+0

Дело в том, что первая загрузка завершена, она возвращает объект unicode, а не json, получив ошибку: объект «unicode» не имеет атрибута «read» –

+0

@JoseMendez Я думаю, вы смущены тем, что «объект JSON ' является. Это всего лишь строка (возможно, unicode). Какая ошибка вы получаете? – Turn

0

Вам не нужно все \»в вашем JSON. Ваш JSON должен выглядеть.

j_dict = {"country": "canada", 
      "tours": [{"title":"Canadian Rockies Trail","price":"$2249"},{"title":"2-Day Fantasy Island Getaway","price":"$269"}]} 

тогда ваша программа должна выглядеть следующим образом. Сначала вам необходимо преобразовать ваш словарь в строку json.

import json 

j_string = json.dumps(j_dict) 
foobar = json.loads(j_string)['tours'] 
Смежные вопросы