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

时间:2016-07-17 11:05:05

标签: 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
}

这里的事情是我不知道什么是variable1或2.这里没有模式。

我想在此提及的一点是,如果我可以将变量变为普通字符串,那也没关系

例如,

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

这对我的目的有好处。谢谢你的所有答案。

1 个答案:

答案 0 :(得分:2)

它是一个使用demjson模块的kludge,它允许你解析大部分有点不确认的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'}

请注意,虽然此在所提供的示例数据中有效,但如果您的输入中有其他需要进一步修改的麻烦,您的里程可能会有所不同。