python - 将带有变量名称的字符串转换为字典

标签 python string dictionary

我有一个不太复杂的字符串,它有一些嵌入为值的对象。我需要将它们转换为正确的 dict 或 json。

foo = '{"Source": "my source", "Input": {"User_id": 18, "some_object": this_is_a_variable_actually}}'

请注意,最后一个键 some_object 的值既不是字符串也不是 int。因此,当我执行 json.loadsast.literal_eval 时,我收到格式错误的字符串错误,因此 Converting a String to Dictionary不起作用。

我无法控制字符串的来源。

是否可以将此类字符串转换为字典

我需要的结果是这样的字典

dict = {
        "Source" : "Good",
        "object1": variable1,
        "object2": variable2
}

这里的问题是我不知道变量1或2是什么。这里没有模式。

这里我想提的一点是,如果我可以将变量设置为纯字符串,那也可以

例如,

dict = {
        "Source" : "Good",
        "object1": "variable1",
        "object2": "variable2"
}

这对我的目的有好处。感谢您的所有回答。

最佳答案

使用 demjson 有点困惑模块允许您解析大部分未确认的 JSON 语法字符串并列出错误...然后您可以使用它来替换找到的无效标记并在其周围加上引号,以便正确解析,例如:

import demjson
import re

foo = '{"Source": "my source", "Input": {"User_id": 18, "some_object": this_is_a_variable_actually}}'

def f(json_str):
    res = demjson.decode(json_str, strict=False, return_errors=True)
    if not res.errors:
        return res
    for err in res.errors:
        var = err.args[1]
        json_str = re.sub(r'\b{}\b'.format(var), '"{}"'.format(var), json_str)
    return demjson.decode(json_str, strict=False)

res = f(foo)

给你:

{'Input': {'User_id': 18, 'some_object': 'this_is_a_variable_actually'}, 'Source': 'my source'}

请注意,虽然这应该适用于所提供的示例数据,但如果您的输入中存在其他需要进一步处理的麻烦,您的情况可能会有所不同。

关于python - 将带有变量名称的字符串转换为字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38420538/

相关文章:

arrays - 追加到字典中的数组值

python - 为什么我在 for 循环中收到无效语法错误?

Windows 中的 Spyder 笔记本电脑意外关闭后 Python 文件为空

python - 如何在 Django 列表中排序

python - Ubuntu 22.04 上的 Django mod_wsgi Apache 错误 403 Forbidden

regex - 用 perl 查找和替换双换行符?

dictionary - 在unity3d中添加字典时为空引用

python - 在 python 中的下划线处拆分并存储第一个值

c - 在 C 和 C++ 中处理字符串

python - pandas - 基于另一列中的 int 的 str(行)切片