从LinkedHashMap转换为Json字符串

21

我使用Jongo操作Mongo数据库,当我进行查询时,会收到一个LinkedHashMap类型的结果。

Iterator one = (Iterator) friends.find(query).projection("{_id:0}").as(Object.class);
while (one.hasNext()) {
    LinkedHashMap data = new LinkedHashMap();
    data = (LinkedHashMap) one.next();
    String content = data.toString();
}
问题在于如果json是{"user":"something"},则内容将变为{user=something},它不是一个json,而仅仅是HashMap的toString方法。如何获取原始JSON?我没有映射响应的类,创建一个映射类也不是解决方案,这就是为什么我使用Object.class的原因。

datos的类型是什么? - Dancrumb
5个回答

38
如果您可以访问某个JSON库,似乎这是正确的方法。
如果使用org.json库,请使用public JSONObject(java.util.Map map)
String jsonString = new JSONObject(data).toString()

如果使用Gson,可以使用@hellboy提到的gson.toJson()方法。
String jsonString = new Gson().toJson(data, Map.class);

5
JSONObject() 方法只能用于 Map<String, String> 类型的对象!(参考链接:https://dev59.com/Rmct5IYBdhLWcg3wWMJF) - nommer
如果需要的话,您可以使用 String jsonString = new JSONObject(data).toJSONString() - pkanane

7
您可以使用谷歌的Gson库将任何对象转换为JSON。以下是将LinkedHashMap转换为JSON的示例 -
Gson gson = new Gson();
String json = gson.toJson(map,LinkedHashMap.class);

3

com.mongodb.BasicDBObject的其中一个构造函数接受Map作为输入。然后,您只需在BasicDBObject对象上调用toString()方法即可。

Iterator one = (Iterator) friends.find(query).projection("{_id:0}").as(Object.class);
    while (one.hasNext()) {
        LinkedHashMap data= new LinkedHashMap();

        data= (LinkedHashMap) one.next();

        com.mongodb.BasicDBObject bdo = new com.mongodb.BasicDBObject(data);    
        String json = bdo.toString();
    }

0
if(data instanceof LinkedHashMap){
   json=new Gson.toJson(data,Map.class).toString();
}
else{
  json=data.toString();
}
return Document.parse(json);

0
我使用以下代码解决了这个问题:
    Iterator one = (Iterator) friends.find(query).projection("{_id:0}").as(Object.class);
    while (one.hasNext()) {
        Map data= new HashMap();

        data= (HashMap) one.next();
        JSONObject d = new JSONObject();
        d.putAll(data);
        String content=d.toString();
    }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接