java - 找不到类 org.json.JSONArray 的编解码器

标签 java mongodb

 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/

相关文章:

python:如何查找具有特定字段的文档

python - MongoDB:链查找()

java - iText 7 - 表格单元格中的图像填充全高

java - java中如何将汉字转为十六进制

java - child 有不同 parent 的树结构

java - 了解 Java 9+ 上的部署

mongodb - 在 mongo shell 中设置 pretty-print 的缩进级别

linux - 为什么在 Linux 上出现错误 mongod dead 但 subsys 被锁定和日志文件可用空间不足?

java - JasperFillManager.fillReport 和 mongo?

java - 用正则表达式替换第一个