private void getUsersWithin24Hours(String id, Map < String, Object > payload) throws JSONException {
JSONObject json = new JSONObject(String.valueOf(payload.get("data")));
Query query = new Query();
query.addCriteria(Criteria.where("user_id").is(id).and("timezone").in(json.get("timezone")).and("gender").in(json.get("gender")).and("locale").in(json.get("language")).and("time").gt(getDate()));
mongoTemplate.getCollection("user_log").distinct("user_id", query.getQueryObject());
}
我打算查询并从 mongodb 获取结果,我成功地使用了 mongo 终端命令:
db.getCollection('user_log').find({"user_id" : "1", "timezone" : {$in: [5,6]}, "gender" : {$in : ["male", "female"]}, "locale" : {$in : ["en_US"]}, "time" : {$gt : new ISODate("2017-01-26T16:57:52.354Z")}})
但是当我尝试使用 java 时,它给了我以下错误。
org.bson.codecs.configuration.CodecConfigurationException: Can't find a codec for class org.json.JSONArray
执行此操作的理想方法是什么?
提示:实际上我认为在我的代码中这部分 json.get("timezone") 发生了错误。因为它包含数组。当我使用硬编码字符串数组时,这段代码有效
最佳答案
您不必使用 JSONObject/JSONArray
进行转换。
如果 payload.get("data")
是 Map
,请替换为下一行
BasicDBObject json = new BasicDBObject(payload.get("data"));
如果 payload.get("data")
包含 json 字符串,请替换为下一行。
BasicDBObject json =(BasicDBObject) JSON.parse(payload.get("data"));
关于java - 找不到类 org.json.JSONArray 的编解码器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41896714/