Java “检测”;在JSON字符串中,并在特定位置对其进行转义
我收到一个包含JSON对象的字符串,不幸的是,该JSON字符串中的一个值如下所示:Java “检测”;在JSON字符串中,并在特定位置对其进行转义,java,json,Java,Json,我收到一个包含JSON对象的字符串,不幸的是,该JSON字符串中的一个值如下所示: { "name":"Content-Type", "value":"multipart/alternative; boundary="=-SITt2U5w3MJ1Y3RihaWzxw=="" } { "name":"Content-Type",
{
"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,非常感谢你,这非常有效!