【问题标题】:Extracting data from a json file into a csv将json文件中的数据提取到csv中
【发布时间】:2020-02-21 21:18:10
【问题描述】:

我是处理 json 文件的新手,希望能得到一些帮助。 这是我正在处理的 json 文件的一部分(因为我将其全部发布太多了)

[{"id":804,"name":{"english":"Naganadel","japanese":"\u30a2\u30fc\u30b4\u30e8\u30f3"},"type":["Poison","Dragon"],"base":{"HP":73,"Attack":73,"Defense":73,"Sp. Attack":127,"Sp. Defense":73,"Speed":121}},{"id":805,"name":{"english":"Stakataka","japanese":"\u30c4\u30f3\u30c7\u30c4\u30f3\u30c7"},"type":["Rock","Steel"],"base":{"HP":61,"Attack":131,"Defense":211,"Sp. Attack":53,"Sp. Defense":101,"Speed":13}},{"id":806,"name":{"english":"Blacephalon","japanese":"\u30ba\u30ac\u30c9\u30fc\u30f3"},"type":["Fire","Ghost"],"base":{"HP":53,"Attack":127,"Defense":53,"Sp. Attack":151,"Sp. Defense":79,"Speed":107}},{"id":807,"name":{"english":"Zeraora","japanese":"\u30bc\u30e9\u30aa\u30e9"},"type":["Electric"],"base":{"HP":88,"Attack":112,"Defense":75,"Sp. Attack":102,"Sp. Defense":80,"Speed":143}},{"id":808,"name":{"english":"Meltan","japanese":"\u30e1\u30eb\u30bf\u30f3"},"type":["Steel"],"base":{"HP":46,"Attack":65,"Defense":65,"Sp. Attack":55,"Sp. Defense":35,"Speed":34}},{"id":809,"name":{"english":"Melmetal","japanese":"\u30e1\u30eb\u30e1\u30bf\u30eb"},"type":["Steel"],"base":{"HP":135,"Attack":143,"Defense":143,"Sp. Attack":80,"Sp. Defense":65,"Speed":34}}]

我正在尝试获取每个口袋妖怪的 id、名称、类型、基础、hp、攻击、防御和速度。我附上了我目前拥有的内容,其中包括我尝试获取 ID 并打印它。

当我运行这个文件时,我得到列表索引必须是整数或切片,而不是 str。

import json

def main():

    f = open('pokedex.json')
    data = json.load(f)
    f.close()
    #print data
    id_poke = data['_embedded']['id_poke']
    id_info = []
    for i in id_poke:
        id_poke.append(i['id'])


if __name__ == '__main__':
    main()

【问题讨论】:

  • JSON 不是基于行的。您需要包含足够的 json 才能真正重现问题。
  • 谢谢,我明白了,我只是不想包含整个文件。我包含了来自 JSON 文件的更多信息。谢谢你的编辑
  • 乍一看,JSON 似乎足以调试您的代码,但可能还不够。您的 JSON 中的 _embeddedid_poke 在哪里?
  • 这里的问题很可能是data['_embedded'] 是一个列表,但您将其视为字典。

标签: python json python-3.x list


【解决方案1】:

查看您在问题中包含的 json 示例:它以 [ 开头,这意味着它是一个列表,而不是字典。当您将此对象分配给变量data,然后尝试使用(字符串)键_embedded 对该列表进行索引时,您会看到您看到的错误。

我不知道你期望它如何工作,因为你的 json 文件既没有 _embedded 也没有 id_poke 作为键,但为了让你开始,这里是如何打印出每个对象的数字 id 和英文名称;你可以从那里拿走。

for poke in data:   # magic iteration over a list: data[0], data[1] etc.
    print(poke["id"], poke["name"]["english"])

【讨论】:

    【解决方案2】:

    声明

    id_poke = data['_embedded']['id_poke']
    

    作为 str()

    【讨论】:

      猜你喜欢
      • 2018-05-20
      • 2020-03-08
      • 1970-01-01
      • 1970-01-01
      • 2018-06-23
      • 2022-11-01
      • 2018-01-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多