gpt4 book ai didi

java - 用于在 JSON 值中有选择地转义字符的正则表达式

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:08:34 30 4
gpt4 key购买 nike

我的 JSON 可能在某些值中包含双引号。我的解析器正确地将这些值解释为值的结尾,而实际上它只是用户输入的双引号并且是值本身的一部分。理想情况下,这将在客户端进行转义,但在这种情况下是不可能的。因此,我需要在服务器端更正此问题。服务器代码是一个 java servlet,我相信最简单的方法是使用正则表达式来查找可能存在此问题的字段并替换其中的任何引号。这有点棘手,因为我必须区分值末尾的合法引号和值本身内部的错误引号。

示例 JSON:

{
"question" : "some question",
"answer" : "some answer that might have "quotes" in it.",
"name" : "some name"
}

编辑:在某些情况下,该字段实际上可能位于最后,在这种情况下,它后面将跟一个右大括号。

我一直在努力创建一个正则表达式来查找满足上述要求的报价。所以我的问题是:

什么是正则表达式(如果有的话)可以找到满足上述条件的报价?如果没有,这个问题如何用另一种方式解决?

一个额外的细节:在同一个字符串中可能有也可能没有多个 JSON 数组,尽管我可以将它们拆分成一个字符串数组。

最佳答案

您需要先提取答案字符串,然后对双引号进行转义。

考虑这段代码:

Sting str = "{\"question\" : \"some question\", \"answer\": " + 
"\"some answer that might have \"quotes\" in it.\", \"name\": \"some name\"}";
Matcher m = Pattern.compile
("(?s)(?i)(\"answer\"\\s*:\\s*\")(.+?)(?=\"\\s*[,}])").matcher(str);
StringBuffer buf = new StringBuffer();
while (m.find()) {
m.appendReplacement(buf, m.group(1) + m.group(2).replace("\"", "\\\\\""));
}
m.appendTail(buf);
System.out.printf("%s%n", buf);

输出:

{
"question" : "some question",
"answer": "some answer that might have \"quotes\" in it.",
"name": "some name"
}

关于java - 用于在 JSON 值中有选择地转义字符的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17455392/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com