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

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
Jose Mendez 15 Дек 2015 в 21:39

3 ответа

Лучший ответ

Проблема, которую я вижу здесь, состоит в том, что ваша 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
taesu 15 Дек 2015 в 18:47

Вам не нужны все \ "в вашем 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']
0
tornesi 15 Дек 2015 в 18:53

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

json.loads(json_dict['tours'])

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

0
erkyky 15 Дек 2015 в 18:41