2

我需要使用 LDAP 从服务器获取数据。我正在使用 ldap3 并且正在获取我需要的所有属性和响应,但是它们被困在 ldap.abstract.entry.entry 类中。我尝试了几种方法将数据转换为 json 或列表形式,但它从来没有像我预期的那样工作。

例如我试过:

entry = conn.entries
current_data = (entry.entry_to_json())
print(type(current_data))
print(len(current_data))
>>> <class 'str'>
>>> 480

然而,这导致我所有的数据都是长度为 480 或更长的单个字符串。我尝试过使用它,但事实证明这非常困难。所以我尝试了以下方法将字符串转换为字典:

current_data = (entry[0].entry_to_json())
current_data = ast.literal_eval(current_data)
print(type(current_data))
print(len(current_data))
>>> <class 'dict'>
>>> 2

但是,现在我无法单独访问所有不同的属性。我的目标是将我从 LDAP 查询中获得的所有数据写入 CSV,以便其他应用程序可以使用它。但目前我被困住了,因为我无法将数据转换为 JSON 或 CSV 格式。

如何从 中获取和处理数据,conn.entries以便将每个属性写入 CSV 中的单独列?

最好的祝愿,

C.泽布

编辑:

这是我使用时得到的示例(entry.entry_to_json())

{
    "attributes": {
        "dcxLDOUniqueCN": [
            "XXXX"
        ],
        "dcxPostalAddress": [
            "XXX"
        ],
        "dcxSupervisor": [
            "XXX"
        ],
        "mail": [
            "XXX"
        ],
        "mobile": [],
        "uid": [
            "XXX"
        ]
    },
    "dn": "XXX"
}
{
    "attributes": {
        "dcxLDOUniqueCN": [],
        "dcxPostalAddress": [
            "XXX"
        ],
        "dcxSupervisor": [
            "XXX"
        ],
        "mail": [],
        "mobile": [],
        "uid": [
            "XXX"
        ]
    },
    "dn": "XXX"
}
4

2 回答 2

4

我知道已经晚了,但万一其他人正在寻找这个......

来自https://ldap3.readthedocs.io/en/latest/searches.html#entries

属性存储在不区分大小写访问的内部字典中。您甚至可以使用 entry_raw_attribute(attribute_name) 访问原始属性以获取属性原始值,或使用属性 entry_raw_attributes 获取整个原始属性字典。

所以entry.entry_raw_attributes会给你你想要的字典。

于 2020-10-30T13:20:51.623 回答
1

当我使用库并从APIldap3以 JSON 形式返回响应时,我需要做类似的事情。Flask我在自己的搜索中找到了这个条目,所以希望这可以帮助其他人。

正如您已经发现的那样,该entry_to_json()方法将ldap3.abstract.entry.Entry对象中的详细信息转换为 JSON 字符串。这可以与json内置库结合使用,使用json.loads().

在 IDLE 中使用您的示例,但为简洁起见跳过ldap3组件:

>>> my_entry = '''{
"attributes": {
    "dcxLDOUniqueCN": [
        "XXXX"
    ],
    "dcxPostalAddress": [
        "XXX"
    ],
    "dcxSupervisor": [
        "XXX"
    ],
    "mail": [
        "XXX"
    ],
    "mobile": [],
    "uid": [
        "XXX"
    ]
},
"dn": "XXX"
}'''
>>> print(type(my_entry))
<class 'str'>    
>>> import json
>>> my_entry_dict = json.loads(my_entry)
>>> print(type(my_entry_dict))
<class 'dict'>
print(my_entry_dict)
{'attributes': {'dcxLDOUniqueCN': ['XXXX'], 'dcxPostalAddress': ['XXX'], 'dcxSupervisor': ['XXX'], 'mail': ['XXX'], 'mobile': [], 'uid': ['XXX']}, 'dn': 'XXX'}    
于 2020-03-25T17:26:45.050 回答