2011-04-18 36 views
18

Ứng dụng của tôi sử dụng các đối tượng JSON rất nhiều (org.json.JSONArray và bạn bè). Cách hiệu quả nhất để lưu trữ chúng vào Mongo DBObjects để chúng có thể được truy vấn là gì? BasicDBObject không thể tuần tự hóa một JSONArray - dường như không có khả năng tương tác giữa hai cấu trúc phân cấp này.Sử dụng JSON với MongoDB?

Trả lời

8

OK nó dường như không có khả năng tương tác, vì vậy tôi cuộn của riêng tôi. Busywork để có được xung quanh các loại hệ thống:

public class Util { 
    public static DBObject encode(JSONArray a) { 
     BasicDBList result = new BasicDBList(); 
     try { 
      for (int i = 0; i < a.length(); ++i) { 
       Object o = a.get(i); 
       if (o instanceof JSONObject) { 
        result.add(encode((JSONObject)o)); 
       } else if (o instanceof JSONArray) { 
        result.add(encode((JSONArray)o)); 
       } else { 
        result.add(o); 
       } 
      } 
      return result; 
     } catch (JSONException je) { 
      return null; 
     } 
    } 

    public static DBObject encode(JSONObject o) { 
     BasicDBObject result = new BasicDBObject(); 
     try { 
      Iterator i = o.keys(); 
      while (i.hasNext()) { 
       String k = (String)i.next(); 
       Object v = o.get(k); 
       if (v instanceof JSONArray) { 
        result.put(k, encode((JSONArray)v)); 
       } else if (v instanceof JSONObject) { 
        result.put(k, encode((JSONObject)v)); 
       } else { 
        result.put(k, v); 
       } 
      } 
      return result; 
     } catch (JSONException je) { 
      return null; 
     } 
    } 
} 
0

Tôi không biết về trình điều khiển mongo java, nhưng trong c# mongo driver có lớp BsonSerializer. Bạn có thể sử dụng nó như đoạn mã sau:

var q = BsonSerializer.Deserialize<MyDocument>("{ jsonValueName:jsonValue }"); 

plz kiểm tra mongo-java-driver, tôi cảm ơn nó nên chứa các cơ sở tương tự

cũng nhìn vào bson4jackson

+0

Có, tôi có thể tuần tự hóa thành một chuỗi và deserialize chuỗi, nhưng tôi đã cố gắng để interoperate các đối tượng bản địa. Cảm ơn mặc dù. – Simon

28

com.mongodb.util.JSON có một phương pháp để phân tích một chuỗi JSON thành DBObject. JSONCallback mặc định sẽ trả về BasicDBObject hoặc BasicDBList theo chuỗi đầu vào.

Object jsonObj = ...; //any of your org.json objects 
Object o = com.mongodb.util.JSON.parse(jsonObj.toString()); 
DBObject dbObj = (DBObject) o; 
0

Thao tác này và đặt câu hỏi là tại sao người Mongo quyết định có kiểu trả về đối tượng thay vì DBObject: có ai biết không?

Một giải pháp thay thế tốt, nếu bạn có nhiều JSON trong ứng dụng của mình, sẽ sử dụng Jackson cho (de) serialization.

Các vấn đề liên quan