【问题标题】:Extract data from multi array from json从json的多数组中提取数据
【发布时间】:2014-10-09 12:15:45
【问题描述】:

我是python新手。我需要从json文件中提取数据。

import urllib
import re
import json
text = urllib.urlopen("http://www.acer.com/wjws/ws/gdp/files/en/IN/-/latest/driver/63/-").read()
result = json.loads(text)  # result is now a dict
print result['Files']['OS']['Id']

我需要从上面的 JSON 链接中提取“文件”中“操作系统”中的“Id”字段

我收到以下错误: TypeError: 列表索引必须是整数,而不是 str

链接包含的数据为

{ “文件”:{ “结果”:“确定”, “语言”: [ { “Id”:“bg”, “标题”:“保加利亚” },

        {
            "Id": "no",
            "Title": "Norwegian"
        },

    ],
    "SearchedLanguage": "en",
    "OS": [
        {
            "Id": "001",
            "Title": "Windows® 2000 Professional"
        },
        {
            "Id": "098",
            "Title": "Windows® 98"
        },
        {
            "Id": "0ME",
            "Title": "Windows® ME"
        },
        {
            "Id": "X02",
            "Title": "Windows® XP 32-bit"
        },
        {
            "Id": "X05",
            "Title": "Windows® XP 64-bit"
        }
    ],
    "File": [
        {
            "Link": "http:\/\/global-download.acer.com\/GDFiles\/Driver\/VGA\/VGA_VIA_1.0_w2k.zip?acerid=633676006896131590",
            "Category": "VGA",

        },

    ]
} }

【问题讨论】:

  • OS 包含一个列表。您首先必须选择要从中获取Id 的列表元素。
  • 你能详细说明一下吗。我是新手。你能更正那个代码
  • 你有一个字典列表,例如os = [{'Id': 1}, {'Id': 2}]。您无法访问os['Id'],因为os 不是字典,而是列表。您必须首先访问要从中获取 id 的元素,例如os[0]['Id'] 获取列表第一个元素的 id。您还可以遍历列表以访问每个元素的 id。你还没有真正解释你想要做什么,所以我不知道你在寻找什么解决方案。了解有关列表的更多信息:docs.python.org/2/tutorial/introduction.html#listsdocs.python.org/2/tutorial/datastructures.html
  • 我需要提取所有 Id 字段值,例如 001,098,X02,X05

标签: python json


【解决方案1】:

将最后一行代码改为,

打印结果['Files']['OS'][0]['Id']

它将获取操作系统中的第一个 id。

【讨论】:

  • 我需要操作系统中的所有“Id”
  • 如何一次获取所有ID?请帮帮我
  • @MadhuKiranArja:我已经发布了一个重复问题的链接:stackoverflow.com/questions/20891141/…。在那里你会找到解决方案。
  • 你@FelixKling。我从那个问题中得到了我需要的答案。谢谢你帮助我。
【解决方案2】:

尝试如下......

for i in range(len(result['Files']['OS'])):
   print result['Files']['OS'][i]['Id'];

output
======
001
001
098
0ME
X02
X05

【讨论】:

  • 这是一种非常不符合 Python 标准的迭代列表的方式。
  • 完美。谢谢你纳伦德拉
  • @MadhuKiranArja:请务必阅读 Python 文档以了解如何在 Python 中正确迭代列表。
猜你喜欢
  • 1970-01-01
  • 2014-07-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-09
  • 1970-01-01
相关资源
最近更新 更多