【问题标题】:Python3, iterate to JSON array without namePython3,迭代到没有名称的JSON数组
【发布时间】:2018-08-01 01:41:36
【问题描述】:

我正在尝试遍历这个 json 数组:

[{
    "date": "2018-02-21T12:53:00",
    "name": "System date",
    "ID_BBData": "none",
    "TOKEN_BBData": "none",
    "rawValue": 540916682
},
{
    "date": "2018-02-21T12:53:00",
    "name": "Temperature sensor 1",
    "ID_BBData": "none",
    "TOKEN_BBData": "none",
    "rawValue": 11
},
{
    "date": "2018-02-21T12:53:00",
    "name": "Value week",
    "ID_BBData": "none",
    "TOKEN_BBData": "none",
    "rawValue": 1810
}]

有了这个循环:

# print the keys and values
for key in jsonObject:
    value = jsonObject[key]
    print("The key and value are ({}) = ({})".format(key, value))

其中jsonObject就是上面的json。 问题是 json 被 [] 包围,但这个数组没有任何名称。

有什么线索可以遍历这个吗?

非常感谢!

【问题讨论】:

  • [] JSON”的名称 jsonObject,不是吗?这是一个列表。遍历列表会产生单个列表项,而不是键。
  • 如果你想要一个线索:Python 中没有“json 对象”这样的东西。 json 是一种文本格式,一旦解析它就会产生等效的 Python 数据类型:lists 用于 json 数组,dicts 用于 json 对象等。所以你这里有一个 Python list 的 Python dicts。现在您可以学习如何迭代 Python list 以及如何使用 Python dict(如果您希望使用 Python 做任何事情,这两项都是必需的技能)。

标签: python arrays json


【解决方案1】:

首先,您应该了解您的对象是一个字典列表。如果您将数据放入变量中,例如 lst,您可以轻松检查这一点,然后检查类型:

>>> lst
[{'date': '2018-02-21T12:53:00', 'name': 'Temperature sensor 1', 'ID_BBData': 'none', 'TOKEN_BBData': 'none', 'rawValue': 11}, {'date': '2018-02-21T12:53:00', 'name': 'Value week', 'ID_BBData': 'none', 'TOKEN_BBData': 'none', 'rawValue': 1810}]
>>> type(lst)  # the type of the whole datastructure
<class 'list'>

>>> type(lst[0])  # the type of the first element of the list
<class 'dict'>

如果你明白,你有这样的结构,你可以开始考虑遍历列表中的项目,其中每个项目都是一个字典:

>>> for lst_item in lst:
...     for key, value in lst_item.items():  # this is python3 specific
...         print('key: {} value: {}'.format(key, value))
... 
key: date value: 2018-02-21T12:53:00
key: name value: Temperature sensor 1
key: ID_BBData value: none
key: TOKEN_BBData value: none
key: rawValue value: 11
key: date value: 2018-02-21T12:53:00
key: name value: Value week
key: ID_BBData value: none
key: TOKEN_BBData value: none
key: rawValue value: 1810

如果你想在python2中迭代一个字典,使用

for key, value in lst_item.iteritems():

改为。

【讨论】:

    【解决方案2】:

    如果要遍历所有列表元素(如 cmets 中所述,它是列表而不是 json 对象):

    for line in jsonObject:
        for key, value in line.items():
            print("The key and value are ({}) = ({})".format(key, value))
    

    【讨论】:

      【解决方案3】:

      先转换json数组,再做python编码取值。

      data = json.loads(array)
      

      【讨论】:

        猜你喜欢
        • 2020-08-09
        • 1970-01-01
        • 2021-10-25
        • 2017-11-27
        • 2020-01-08
        • 1970-01-01
        • 2014-12-01
        • 1970-01-01
        • 2016-04-06
        相关资源
        最近更新 更多