Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java “检测”;在JSON字符串中,并在特定位置对其进行转义_Java_Json - Fatal编程技术网

Java “检测”;在JSON字符串中,并在特定位置对其进行转义

Java “检测”;在JSON字符串中,并在特定位置对其进行转义,java,json,Java,Json,我收到一个包含JSON对象的字符串,不幸的是,该JSON字符串中的一个值如下所示: { "name":"Content-Type", "value":"multipart/alternative; boundary="=-SITt2U5w3MJ1Y3RihaWzxw=="" } { "name":"Content-Type",

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

{
    "name":"Content-Type",
    "value":"multipart/alternative; boundary="=-SITt2U5w3MJ1Y3RihaWzxw==""
}
{
    "name":"Content-Type",
    "value":"multipart/alternative; boundary=/"=-SITt2U5w3MJ1Y3RihaWzxw==/""
}
正如您所看到的,这个JSON对象的值包含两个需要转义的
符号,因此结果如下所示:

{
    "name":"Content-Type",
    "value":"multipart/alternative; boundary="=-SITt2U5w3MJ1Y3RihaWzxw==""
}
{
    "name":"Content-Type",
    "value":"multipart/alternative; boundary=/"=-SITt2U5w3MJ1Y3RihaWzxw==/""
}
然后解析到JAVA Pojo就可以了。不幸的是,我无法检测到它,上面的对象是数组中的许多对象之一。我知道我可以检测到“boundary”作为关键字,并避开接下来的两个符号。“,我试图让它与正则表达式一起工作,但没有成功


我能在这里做些什么?

如果打算使用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=“
占有式匹配所有字符,直到下一个
。作为替代,使用捕获组包含转义字符

我将尝试从源头解决问题。您得到的是无效的JSON,因此很可能违反了API的约定。您可以尝试使用与
boundary=…
匹配的正则表达式,但您是否可以确保始终有2个双引号需要转义,并且这只发生在“boundary”上?您可能指的是\不是转义字符。Thomas是对的,在你这边解决这个问题没有任何意义,让负责这个所谓API的人来修复它,这样它就会发出有效的JSON。你是对的,转义的应该是\“当然。不幸的是,我没有可能更改源代码,因为它是AmazonAWSAPI。我使用Java SDK,它发出错误的JSON。@TobiasKuess那么您可能应该用另一个JSON序列化程序/反序列化程序替换JSON序列化程序/反序列化程序。
我收到一个包含JSON对象的字符串
-您没有。这不是一个有效的JSONTANK,非常感谢你,这非常有效!