Python 如何基于文本值的存在拆分JSON对象?

Python 如何基于文本值的存在拆分JSON对象?,python,json,Python,Json,我正在使用Python中的Reqests模块从RESTAPI中提取信息。数据以JSON格式返回-JSON数组的每个元素表示一个用户,groups子数组表示其Active Directory组。示例条目如下所示: { "id": 0101010101, "createdAt": 111111, "displayName": "Jones, Steve",

我正在使用Python中的Reqests模块从RESTAPI中提取信息。数据以JSON格式返回-JSON数组的每个元素表示一个用户,groups子数组表示其Active Directory组。示例条目如下所示:

{
                    "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': [{...},{...}]}

数据中的实际内容是什么?您的代码有什么问题?数据中实际有什么?你的代码有什么问题?这正是我需要的。非常感谢。这正是我需要的。非常感谢。