【问题标题】:Handling JSON array in Python [duplicate]在 Python 中处理 JSON 数组
【发布时间】:2021-10-15 16:29:06
【问题描述】:

我正在尝试使用在 AWS Lambda 函数中运行的 Python 脚本中的以下传入 json。这在通常的事件对象上作为 dict 进入 Lambda。

{
    "WirelessDeviceId": "AAAAA-BBBBB-CCCC-DDDD-EEEEEEEEEEE",
    "AddedDeviceDecoderType": "TEST",
    "PayloadData": "Aw==",
    "WirelessMetadata": {
      "LoRaWAN": {
        "ADR": true,
        "Bandwidth": 125,
        "ClassB": false,
        "CodeRate": "4/5",
        "DataRate": "3",
        "DevAddr": "LMNOP123",
        "DevEui": "DPLAMSD010101",
        "FCnt": 42,
        "FOptLen": 1,
        "FPort": 4,
        "Frequency": "905100000",
        "Gateways": [
          {
            "GatewayEui": "ABC123",
            "Rssi": -109,
            "Snr": 8
          }
        ],
        "MIC": "ABC900000",
        "MType": "UnconfirmedDataUp",
        "Major": "LoRaWANR1",
        "Modulation": "LORA",
        "PolarizationInversion": false,
        "SpreadingFactor": 7,
        "Timestamp": "2021-08-08T16:04:10Z"
      }
    }
  }

我正在为“网关”数组苦苦挣扎,它可能有 1 到 10 个条目。

现在,在测试期间,我只有一个网关,并且正在像这样在 Python 中解决它。

rssi = event['WirelessMetadata']['WirelessMetadata']['Gateways'][0]['Rssi']

但是当添加新网关时,我不知道该数组中有多少网关,也不知道它们被分配到什么索引,如此快速地硬编码 [0] 将不起作用。

新手问题,但处理这种情况的最佳方法是什么?我认为这可能与遍历数组有关,但我有点难以理解最佳实践。

【问题讨论】:

  • Getaway 是一个 dict 列表,因此您可以检索该列表并对其进行迭代。
  • for gw in event['WirelessMetadata']['WirelessMetadata']['Gateways']: do something with gw

标签: python arrays json aws-lambda


【解决方案1】:

您可以遍历网关列表。

gateways = event['WirelessMetadata']['WirelessMetadata']['Gateways']

amount_of_gateways = len(gateways)

for gateway in gateways:
    print(gateway["Rssi"])

【讨论】:

    猜你喜欢
    • 2018-05-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-26
    • 1970-01-01
    • 2018-04-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多