Python 如何基于文本值的存在拆分JSON对象?
我正在使用Python中的Reqests模块从RESTAPI中提取信息。数据以JSON格式返回-JSON数组的每个元素表示一个用户,groups子数组表示其Active Directory组。示例条目如下所示:Python 如何基于文本值的存在拆分JSON对象?,python,json,Python,Json,我正在使用Python中的Reqests模块从RESTAPI中提取信息。数据以JSON格式返回-JSON数组的每个元素表示一个用户,groups子数组表示其Active Directory组。示例条目如下所示: { "id": 0101010101, "createdAt": 111111, "displayName": "Jones, Steve",
{
"id": 0101010101,
"createdAt": 111111,
"displayName": "Jones, Steve",
"firstName": "Steve",
"lastName": "Jones",
"groups": [
"All Users",
"Anyville Users (WIN10)",
"Windows 10 Users"
],
"deviceCount": 0
},
{
"id": 0101010102,
"createdAt": 111111,
"displayName": "Smith, Dave",
"firstName": "Dave",
"lastName": "Smith",
"groups": [
"All Users",
"Faketown Users (WIN7)",
"Windows 7 Users"
],
"deviceCount": 0
}
如何迭代JSON数组,评估groups数组是否包含与一组位置(Anyville、Faketown、Noweherland)中的任何一个匹配的文本,并将该行放入每个位置的单独对象中?我最接近的例子如下:
faketownUsers={}
response=requests.request(“GET”,url,headers=headers)
ir=json.load(response.text)
数据=ir['result']['searchResults']
对于数据中的行:
如果str(行)中有“Faketown”:
faketownUsers.extend(行)
您的行
代表完整的字典,但您需要查看组
项内部。
组
是一个列表
,您要查找的字符串是该列表
项的一部分。
有很多方法,我将给出两个示例,方法1:
locations={'Faketown':[]
对于数据中的行:
对于第['groups'行]中的组:
如果“小鹿”在组中:
位置['Faketown']。追加(行)
方法2:
locations={'Faketown':[]
对于数据中的行:
如果“”中的“Faketown”,则加入(第['groups']行):
位置['Faketown']。追加(行)
您可以将任何其他位置添加到
位置
您的行
代表完整的词典,但您需要查看组
项内部。
组
是一个列表
,您要查找的字符串是该列表
项的一部分。
有很多方法,我将给出两个示例,方法1:
locations={'Faketown':[]
对于数据中的行:
对于第['groups'行]中的组:
如果“小鹿”在组中:
位置['Faketown']。追加(行)
方法2:
locations={'Faketown':[]
对于数据中的行:
如果“”中的“Faketown”,则加入(第['groups']行):
位置['Faketown']。追加(行)
您可以将任何其他位置添加到位置
我会执行以下操作:
# load data, raise an exception on error
res = requests.get(url, headers=headers)
res.raise_for_status()
# get data from json response
data = res.json()['result']['searchResults']
# figure out which user groups match
locations = {'Faketown': [], 'Anyville': []}
for row in data:
for locname, locarr in locations.items():
if any(locname in grp for grp in row['groups']):
locarr.append(row)
为了更好地检查/处理错误,我对您的其他代码做了一些更改,主要是通过抛出异常来执行以下操作:
# load data, raise an exception on error
res = requests.get(url, headers=headers)
res.raise_for_status()
# get data from json response
data = res.json()['result']['searchResults']
# figure out which user groups match
locations = {'Faketown': [], 'Anyville': []}
for row in data:
for locname, locarr in locations.items():
if any(locname in grp for grp in row['groups']):
locarr.append(row)
为了更好地检查/处理错误,我对您的其他代码做了一些修改,主要是通过抛出异常,您可以将对象转换为字符串来检查它是否包含子字符串,而不是将其检查到每个字段中
from collections import defaultdict
locations = defaultdict([])
locations_to_check = ['Anyville', 'Faketown', 'Nowehereland']
for row in data:
for location in locations_to_check:
if location in str(row['groups']):
locations[location].append(row)
# output
# {'Anyville': [{...}, {...}], 'Faketown': [{...},{...}]}
您可以将对象转换为字符串,以检查它是否包含子字符串,而不是将其检查到每个字段中
from collections import defaultdict
locations = defaultdict([])
locations_to_check = ['Anyville', 'Faketown', 'Nowehereland']
for row in data:
for location in locations_to_check:
if location in str(row['groups']):
locations[location].append(row)
# output
# {'Anyville': [{...}, {...}], 'Faketown': [{...},{...}]}
数据中的实际内容是什么?您的代码有什么问题?数据中实际有什么?你的代码有什么问题?这正是我需要的。非常感谢。这正是我需要的。非常感谢。