0

我正在使用 Java Play Framework、MongoDB 和 Jongo 的组合作为基本 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"}
4

1 回答 1

1

您正在手动构建 JSON,并且做错了。您需要学习基本的JSON 语法要求

一个基本的 JSON 编码对象是

{"key1":"value1","key2":"value with \" escaped internal quote"}

注意所有的引号。您的 json 字符串是一个非常长的对象键,没有关联值,这是不允许的。所有键都必须有值。

于 2014-08-20T21:42:58.523 回答