- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我有一个 java 应用程序,我想在其中将 json 数据从 servlet 发送到 jsp。我使用 mongodb 作为 Json 的数据库和 Gson 库。
我是 Java 和 Mongo 的新手。
下面是查询数据库的代码:
MongoClient mongoClient = new MongoClient("localhost", 27017);
DB database = mongoClient.getDB("MyTestDatabase");
coll = database.getCollection("players");
BasicDBObject fields = new BasicDBObject();
fields.put("_id", 0);
fields.put("Incident Date", 1);
fields.put("Longitude", 1);
fields.put("Latitude", 1);
fields.put("Address", 1);
fields.put("Status", 1);
fields.put("Name", 1);
doc.put("Address", "Mumbai");
cursor = coll.find(doc,fields);
这是查询数据库后的结果
{ "_id" : { "$oid" : "5540cae37a104f6bbfe7c9f5"} , "Incident Date" : "30/4/2015" , "Longitude" : "77.61528809" , "Latitude" : "12.9245331" , "Address" : "Mumbai" , "Status" : "Ok" , "Name" : [ "1.ABC" , "2.XYZ" , "3.PQR"]}
我想要实现的是将上述结果转换为 JSON,并通过将结果解析为 json,使用“事件日期”、“状态”等字段访问 JSON。我试图将原始结果解析为 json,但我认为它不能像那样工作
这是我试过的。1. 将 'cursor' 转换为 ArrayList
List<DBObject> myList = new ArrayList<DBObject>();
myList = cursor.toArray();
尝试将 ArrayList 转换为 JSON
JSON json =new JSON();
String serialize = json.serialize(cursor);
我尝试了下面的代码,但是我得到了这个错误
JsonElement jelement = new JsonParser().parse(serialize);
System.out.println(jelement);
JsonObject jobject = jelement.getAsJsonObject();//error at this line
System.out.println(jobject);
Exception in thread "main" java.lang.IllegalStateException: Not a JSON Object: [{"_id":{"$oid":"5540cae37a104f6bbfe7c9f5"},"Incident Date":"30/4/2015","Longitude":"77.61528809","Latitude":"12.9245331","Address":"Mumbai","Status":"Ok","Culprits Name":["1.ABC","2.XYZ","3.PQR"]}]
at com.google.gson.JsonElement.getAsJsonObject(JsonElement.java:90)
谁能帮帮我?
最佳答案
遍历 cursor
并将数据推送到 JSONObject
中,然后将 jsonObject
放入 jsonarray
中,如下所示:
public JSONArray getJsonData() throws JSONException {
JSONArray jsonarray = new JSONArray();
BasicDBObject criteria = new BasicDBObject();
BasicDBObject projections = new BasicDBObject();
criteria.put("Address", "Mumbai");
projections.put("_id", 0);
projections.put("Incident Date", 1);
projections.put("Longitude", 1);
projections.put("Latitude", 1);
projections.put("Address", 1);
projections.put("Status", 1);
projections.put("Name", 1);
DBCursor cursor = coll.find(criteria, projections);
while(cursor.hasNext()) {
BasicDBObject obj = (BasicDBObject) cursor.next();
jsonobj = new JSONObject();
BasicDBList name = (BasicDBList) obj.get("Name");
jsonobj.put("Incident Date", obj.getString("Incident Date"));
jsonobj.put("Longitude", obj.getString("Longitude"));
jsonobj.put("Latitude", obj.getString("Latitude"));
jsonobj.put("Address", obj.getString("Address"));
jsonobj.put("Status", obj.getString("Status"));
jsonobj.put("Name", name);
jsonarray.put(jsonobj);
}
return jsonarray;
}
关于java - 将 dbcursor 对象转换为 json,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29986378/
这是我的代码。我正在尝试将购物车商品移至订单商品表中。它不工作可能是什么问题? CREATE PROCEDURE `insert_order_details` (IN `customer_id` V
我预计getServerAddress返回实际处理查询的 Mongo 服务器(副本集节点之一)的地址。 我正在记录 getServerAddress 的输出并只看到主要地址,尽管我非常确定某些查询是由
如果 DBCursor 在遍历所有项后未关闭 会发生什么情况。我明白 DBCursor 应该关闭。我想知道如果不是这样会怎样。 看起来它不会导致任何内存泄漏。文档说游标将关闭 如果客户端用完游标 或超
这应该是一个简单的问题,但我在任何地方都找不到答案。 我想通过在对集合进行更改之前将其加载到内存中来对集合进行快照。然后我想将快照与新更新的集合进行比较。 我的问题是,如果我加载 DBCursor s
我有以下代码: mongoClient = new MongoClient( "localhost" , 27017 ); db = mongoClient.getDB("hcm"); DBCo
我有一个 java 应用程序,我想在其中将 json 数据从 servlet 发送到 jsp。我使用 mongodb 作为 Json 的数据库和 Gson 库。 我是 Java 和 Mongo 的新手
我有一个使用 Mongodb 作为数据存储的 grails 应用程序。我在服务器端有一些方法需要 dbcursor进行迭代。 光标可能非常大。即超过 20k 条目。 迭代光标后,我的一些方法包含附加逻
我有一个 groovy 脚本,它使用 Mongo Java 驱动程序 mongo-java-driver-2.8.0.jar 访问单个集合中的所有记录,更新任何与预期结构不匹配的记录。该脚本运行得非常
在我的tomcat应用程序中,我使用DBCursor查询mongodb中的记录,当记录过多时,游标会停留在.next(),然后抛出SocketTimeoutException。 虽然,如果我在独立的
我正在尝试使用游标遍历文档,我想将它们存储在一个列表中,然后返回一个 DBOject 类型的列表。 这是我正在尝试的: public List getResultsInDescendingOrderB
我有一个名为 MyCollection 的集合,它在 mongodb 的 bd MyDB 中包含 200 个元素 > use MyDB switched to db MyDB > db.MyColle
我知道 Mongo Java 驱动程序会重试 collection.find() ,以及大多数其他读取操作,根据 Mongo docs . 但我在文档或 driver source 中看不到任何地方-
我在语句 DBCursor.hasNext() 中遇到“未与主机通信且重试已用完”的异常。 当我搜索时,得到了设置首选项的解决方案。我仍然遇到这个问题。 我的代码如下: public void sam
我正在使用 MongoDB java 驱动程序 3.8 开发 MongoDB。我想知道是否有人可以帮助我理解 DBCursor 和 MongoCursor 之间的区别,因为我可以看到两者都存在于 mo
我正在开发一个 C 程序,用于从 BerkeleyDB DBTree 数据库中提取数据值与特定模式匹配的记录。我创建数据库,打开它,将键的 DBT 和数据的另一个 DBT 清零,将 DBT 标志设置为
我是一名优秀的程序员,十分优秀!