Питон - количество элементов JSON перед извлечением данных
Я использую API, который дает мне файл JSON, структурированный следующим образом:
{
offset: 0,
results: [
{
source_link: "http://www.example.com/1",
source_link/_title: "Title example 1",
source_link/_source: "/1",
source_link/_text: "Title example 1"
},
{
source_link: "http://www.example.com/2",
source_link/_title: "Title example 2",
source_link/_source: "/2",
source_link/_text: "Title example 2"
},
...
И я использую этот код в Python для извлечения необходимых мне данных:
import json
import urllib2
u = urllib2.urlopen('myapiurl')
z = json.load(u)
u.close
link = z['results'][1]['source_link']
title = z['results'][1]['source_link/_title']
Проблема в том, что для его использования мне нужно знать номер элемента, из которого я извлекаю данные. Мой
results может иметь разную длину каждый раз, поэтому я хочу сначала подсчитать количество элементов в results, чтобы я мог настроить цикл для извлечения данных из каждого элемента. 5 ответов:
Чтобы проверить длину ключа результатов:
len(z["results"])Но если вы просто петляете вокруг них, идеально подходит цикл for:
for result in x["results"]: print(result["source_link"])
Вам не нужно было знать длину результата, вы прекрасно справляетесь с циклом for:
for result in z['results']: # process the results hereВ любом случае, если вы хотите знать длину 'результатов':
len(z.results)
Если вы хотите получить длину, вы можете попробовать:
len(z['result'])Но в python мы обычно делаем следующее:
for i in z['result']: # do whatever you like with `i`Надеюсь, это поможет.
Вам не нужно или, скорее всего, не нужно пересчитывать их, чтобы сделать над ними петлю, вы могли бы сделать:
import json import urllib2 u = urllib2.urlopen('myapiurl') z = json.load(u) u.close for result in z['results']: link = result['source_link'] title = result['source_link/_title'] # do something with link/titleИли вы могли бы сделать:
u = urllib2.urlopen('myapiurl') z = json.load(u) u.close link = [result['source_link'] for result in z['results']] title = [result['source_link/_title'] for result in z['results']] # do something with links/titles lists
Несколько указателей:
- нет необходимости знать длину
results, чтобы повторить его. Вы можете использоватьfor result in z['results'].lists начните с0.- Если вам нужен индекс, взгляните на
enumerate.
Comments