我有一个看起来像这样的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)
将返回False
cos,它是对应于device_name(在这种情况下为barometerEntity)的'mTestStatus'的值。
答案 0 :(得分:1)
您的代码格式错误,应为:
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
最后3行-向左移动。
该函数的末尾应该有return,当您的数据不是list
而不是dict
时返回-否则您的选择将返回None
并可能导致崩溃
>>> hasPassed( 'barometerEntity', a)
False
>>> hasPassed( 'acceleratorEntity', a)
True
>>>
答案 1 :(得分:-1)
尝试一下:
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"]