我正在使用 Java、使用 Java 而不是 Scala、MongoDB 和 Jongo 的 Play 框架作为基本 Web CRUD 应用程序的组合。即使我的字符串不包含任何非法字符,我也会不断收到 JSON 解析异常。它实际上在语句末尾关闭大括号时失败了。以下是我的错误和代码。查询字符串只是一个字符串构建器,搜索对象是否为空或有值,如果有值则附加到字符串中。
钟戈法:
public static Iterable<OneDomain> findWithQueryString(String queryString){
return domains().find("{#}", queryString).as(OneDomain.class);
}
控制器方法:字符串生成器示例:
if(queryStringBuilder.toString().equalsIgnoreCase("")){
queryStringBuilder.append("date: {$gte : " + searchObj.dateFrom + ", $lt: " + searchObj.dateTo + "}");
}else{
queryStringBuilder.append(" , ");
queryStringBuilder.append("date: {$gte : " + searchObj.dateFrom + ", $lt: " + searchObj.dateTo + "}");
}
String queryString = queryStringBuilder.toString();
Iterable<OneDomain> filteredIterable = OneDomain.findWithQueryString(queryString);
给我这个错误:
Caused by: com.mongodb.util.JSONParseException:
{"source : Online Lists , blacklist : true , vetted : true , is : false , isNot : true"}
^
以“}”上的错误结束它。
除此之外,如果我尝试通过输入 \" 来转义字符,使其变为 \"date\",它将解析并出错,如下所示:
Caused by: com.mongodb.util.JSONParseException:
{"\"source\" : \"Online Lists\" , \"blacklist\" : true , \"vetted\" : true , \"is\" : false , \"isNot\" : true"}
我真的可以这样做吗,或者因为它插入了 Java,引号将围绕整个字符串,因此它试图将它作为单个 JSON 字段读取而不是整个查询?