簡體   English   中英

用python3解析json

[英]Parsing json with python3

新手python程序員在這里,我有以下json響應:

[
  {
    "type": "Incursion",
    "state": "mobilizing",
    "influence": 1,
    "has_boss": true,
    "faction_id": 500019,
    "constellation_id": 20000739,
    "staging_solar_system_id": 30005054,
    "infested_solar_systems": [
      30005050,
      30005051,
      30005052,
      30005053,
      30005054,
      30005055
    ]
  },
  {
    "type": "Incursion",
    "state": "established",
    "influence": 0,
    "has_boss": false,
    "faction_id": 500019,
    "constellation_id": 20000035,
    "staging_solar_system_id": 30000248,
    "infested_solar_systems": [
      30000244,
      30000245,
      30000246,
      30000247,
      30000248,
      30000249,
      30000250,
      30000251,
      30000252,
      30000253
    ]
  },
  {
    "type": "Incursion",
    "state": "mobilizing",
    "influence": 0,
    "has_boss": false,
    "faction_id": 500019,
    "constellation_id": 20000161,
    "staging_solar_system_id": 30001101,
    "infested_solar_systems": [
      30001097,
      30001098,
      30001099,
      30001100,
      30001101,
      30001102
    ]
  },
  {
    "type": "Incursion",
    "state": "established",
    "influence": 0,
    "has_boss": false,
    "faction_id": 500019,
    "constellation_id": 20000647,
    "staging_solar_system_id": 30004434,
    "infested_solar_systems": [
      30004425,
      30004426,
      30004427,
      30004428,
      30004429,
      30004430,
      30004431,
      30004432,
      30004433,
      30004434,
      30004435
    ]
  },
  {
    "type": "Incursion",
    "state": "established",
    "influence": 0.061500001698732376,
    "has_boss": false,
    "faction_id": 500019,
    "constellation_id": 20000570,
    "staging_solar_system_id": 30003910,
    "infested_solar_systems": [
      30003904,
      30003906,
      30003908,
      30003909,
      30003910,
      30003903
    ]
  }
]

編寫原始代碼是為了解析XML響應。

這是有問題的代碼:

incursion_constellations = []

if (online):
    inc = urllib2.urlopen('https://esi.tech.ccp.is/latest/incursions/')
else:
    inc = file(r'incursions.json', 'r')

jinc = json.load(inc)

for j in jinc['items']:
    incursion_constellations.append(str(j['constellation']['id_str']))


for s in all_stations:
    cur.execute("SELECT constellationID FROM mapSolarSystems WHERE solarSystemID = " + str(s['ssid']))
    res = cur.fetchone()
    cid = str(res[0])
    s['incursion'] = cid in incursion_constellations

我很難理解的區域是:jinc in jinc ['items']:

我收到此錯誤:

Traceback (most recent call last):
  File "./stations.py", line 201, in <module>
    for j in jinc['items']:
TypeError: list indices must be integers, not str

誰能幫助我理解如何將其轉換為能夠解析json響應並檢索constellation_id並將其附加到列表中?

提前致謝。

將原始循環更改為:

for j in jinc:
    incursion_constellations.append(str(j['constellation_id']))

但是你需要確保json中的constellation_id與之前['constellation']['id_str']下的id相同

看到[和]在響應的開頭和結尾,似乎這個json響應是列表,而不是dict,正如你的錯誤所暗示的那樣。

如果它是一個列表,你應該使用整數作為索引,而不是str,就像你在dict中所做的那樣。 因此,您的代碼應該是類似的

jinc[0]['constellation_id']

(我沒看到['constellation'] ['id_str']部分來自哪里)

[和]內的任何內容都在列表中,並且應該使用整數索引。 {和}中的那些是在dict中,應該使用str索引。

循環使用它,只需使用range和len。

這里回答了類似的問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM