在python中编写解析嵌套json文件的函数

2024-05-21 09:04:35 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个类似这样的json文件:

{
"mAutomaticTestCompleted": true,
"mAutomaticTestList": [
  {
    "mName": "acceleratorEntity",
    "mTestStatus": true,
    "mX": 3.8043518,
    "mY": 8.114105,
    "mZ": -3.3895721
  },
  {
    "mName": "barometerEntity",
    "mTestStatus": false,
    "mValue": 0
  }]
}

实际上有很多类似于mAutomaticTestlist的字段,它们都是这样的对象列表。 我需要编写一个函数,将device_name和JSON本身作为参数,并返回mTestStatus字段的值。你知道吗

这是我的尝试:

def hasPassed(device_name, data):
    if isinstance(data, dict):
        for key, value in data.items():
            if not isinstance(value, dict) and not isinstance(value, list):
                if key == 'mName' and value == device_name:
                    return data['mTestStatus']
                else:
                    return hasPassed(device_name, value)
            elif isinstance(data, list):
                for element in data:
                    return hasPassed(device_name, element)

这个函数的问题是它没有遍历整个JSON对象。你知道吗


编辑:

所以我希望我的功能是这样工作的:

hasPassed('barometerEntity', json_obj) 

将返回Falsecos,这是与设备名称相对应的'mTestStatus'的值(在本例中是baromperentity)。你知道吗


Tags: 对象函数namejsontruedatareturnif
2条回答

您有错误的代码格式,应该是:

def hasPassed(device_name, data):
    if isinstance(data, dict):
        if 'mName' in data and data['mName'] == device_name :
            return data['mTestStatus']
        else :
            for k in data :
                if hasPassed(device_name, data[k]) : return True
    if isinstance(data, list):
        for element in data:
            if hasPassed(device_name, element) : return True
    return False

最后三行向左移动。你知道吗

函数的末尾应该有一个return,当数据不是listdict时返回,否则sunction将返回None,并可能导致崩溃。你知道吗

>>> hasPassed( 'barometerEntity', a)
False
>>> hasPassed( 'acceleratorEntity', a)
True
>>> 

试试这个:

import json

def hasPassed(device_name, data):

  test_list = json.loads(obj)["mAutomaticTestList"]

  for elt in test_list:
      if elt["mName"] == device_name: return elt["mTestStatus"]

相关问题 更多 >