Python 到 C 尖锐的正则表达式模式来修复 json

本文关键字:模式 json 正则表达式 Python | 更新日期: 2023-09-27 18:36:43

我有一个硬件设备,它通过带有json字符串的http进行控制,但它返回的json已知是无效的。 在Python中,我可以用

response = """[
{text: "67239961", selected: "true", value: "67239961"}
];"""
p = re.compile('([a-zA-Z_]+):')
joined = "".join(response.splitlines())
stripped = joined.strip(';')
cleaned = p.sub(r'"'1":', stripped)
>> [{"text": "67239961", "selected": "true", "value": "67239961"}]

不过,我需要在 C Sharp 中执行此操作,并且对其正则表达式实现不够熟悉。 我试图直接将其移植为

string[] split = response.Split(new string[] { "'r'n", "'n" }, StringSplitOptions.None);
string joined = String.Join("", split);
string stripped = joined.Trim(';');
Regex re = new Regex(@"([a-zA-Z_]+):");
string cleaned = re.Replace(stripped, @"'1");
>> [{'1 "67239961", '1 "true", '1"67239961"}]

实现此目的的正确模式是什么?

编辑:修复是

string cleaned = re.Replace(stripped, @"""$1"":");

Python 到 C 尖锐的正则表达式模式来修复 json

在Newtonsoft JSON包的帮助下,您不必求助于RegEx。

Install-Package Newtonsoft.Json

然后在代码中:

var str = @"[
{text: ""67239961"", selected: ""true"", value: ""67239961""}
];";
var json = JsonConvert.DeserializeObject(response.Replace(";",string.Empty));
var clean = JsonConvert.SerializeObject(json);

结果将是:

[{"text":"67239961","selected":"true","value":"67239961"}]

如果您确实有开头和结尾引号,请使用以下命令:

var json = JsonConvert.DeserializeObject(
    str.Replace(";",string.Empty).Replace("'"[","[").Replace("]'"","]"));