【发布时间】:2023-03-08 03:16:01
【问题描述】:
我有一个(平面)文本字符串,我想将其翻译成 python 字典/json。
示例字符串:
key1=value key2="val ue" key3=[entry1, entry2] key4=["o ne", "[two]"] key5="value with a , or secial character#l" key6="text with a protected quotation \" inside" key7=1,101,42
输出应该是一个 dict/json 看起来像
{
"key1": "value",
"key2": "val ue",
"key3": ["entry1", "entry2"],
"key4": ["o ne", "[two]"],
"key5": "value with a , or secial character#l",
"key6":"text with a protected quotation \" inside",
"key7": [1,101,42]
}
我使用的是这里描述的词法分析器https://www.debugcn.com/en/article/15212391.html,但我坚持如何将它与括号一起使用...
def parse_kv_pairs(text):
lexer = shlex.shlex(text, posix=True)
lexer.whitespace = " "
lexer.wordchars += "="
lexer.quotes = "\""
lexer.wordchars += ".-_()/:+*^&%$#@!?|{}[]'`´,"
return dict(word.split(value_sep, maxsplit=1) for word in lexer)
你知道支持这个的库或者你有能够翻译这个的算法吗?
我为任何成功感到高兴:)
【问题讨论】:
-
欢迎来到 StackOverflow。展示您迄今为止尝试过的内容(代码),并具体说明哪个部分给您带来了麻烦。
-
您确定不能获得不同的输入吗?我可以想象一个解析这个的算法,但是写起来会很乏味,而且我认为有很多边缘情况很难覆盖。例如,如何区分 [1,2] 和 "1,2"
-
@aneroid 我添加了代码。要处理的主要问题是表示 [] 括号的数组。
-
@OndřejBaštař 不幸的是不可能。 [1,2] 是一个数字数组。数组必须始终由括号引入,因此“1,2”只是一个包含逗号的字符串,参见 key5(或 key2)
-
好的。您的示例实际上非常广泛。我觉得必须创建一个自定义算法。尝试这样做,我们可以帮助您调试或希望有人会为您这样做。不过我听起来没那么糟糕。您甚至可以使用 eval() 来帮助您,但只有您可以确定字符串是安全的。
标签: python arrays json algorithm dictionary