在json字符串中检测并在特定位置转义它

yzuktlbb  于 2021-06-30  发布在  Java
关注(0)|答案(1)|浏览(252)

我收到一个包含json对象的字符串,不幸的是,该json字符串中的一个值如下所示:

{
    "name":"Content-Type",
    "value":"multipart/alternative; boundary="=-SITt2U5w3MJ1Y3RihaWzxw==""
}

如您所见,这个json对象的值包含两个 " 需要回避的迹象,结果如下:

{
    "name":"Content-Type",
    "value":"multipart/alternative; boundary=/"=-SITt2U5w3MJ1Y3RihaWzxw==/""
}

然后解析为javapojo就可以了。不幸的是,我无法检测到它,上面的对象是数组中的许多对象之一。我知道我可以把“边界”作为一个关键词,然后避开接下来的两个词 " -但是,我试图让它与正则表达式一起工作,但没有成功。
我能在这里做什么?

b91juud3

b91juud31#

如果打算使用regex转义双引号,下面的代码片段会有所帮助。

public static void main(String[] args) {
        String text = "{\n" +
                "    \"name\":\"Content-Type\",\n" +
                "    \"value\":\"multipart/alternative; boundary=\"=-SITt2U5w3MJ1Y3RihaWzxw==\"\"\n" +
                "}";

        Pattern pattern = Pattern.compile("boundary=\"([^\"]*?)\"");
        Matcher matcher = pattern.matcher(text);
        if (matcher.find()) {
            System.out.println(matcher.replaceAll("boundary=\\\\\"" + matcher.group(1) + "\\\\\""));
        }
    }

它产生以下输出:

{
    "name":"Content-Type",
    "value":"multipart/alternative; boundary=\"=-SITt2U5w3MJ1Y3RihaWzxw==\""
}

正则表达式模式: boundary="([^]*?)" 说明:之后 boundary=" 在下一个角色之前对所有角色进行所有格匹配 " . 替换为使用捕获组包含转义字符

相关问题