apycazo
5/20/2013 - 8:48 PM

Mongo String query to BasicDBObject in java

Mongo String query to BasicDBObject in java


public class MongoStr2DBObject {
  
    public BasicDBObject processQuery (String query) {
        Object obj = JSONValue.parse(query);
        if (obj.getClass() == JSONObject.class) {
            BasicDBObject Q = (BasicDBObject)process(new BasicDBObject(), obj);
            System.out.println("Q: " + Q.toString());
            return Q;
        }
        else {
            return new BasicDBObject();
        }
    }
    
    public Object process (BasicDBObject dbo, Object jso) {
        Class clazz = jso.getClass();
        if (clazz == JSONObject.class) {
            JSONObject json_o = (JSONObject) jso;
            Iterator it = json_o.keySet().iterator();
            while (it.hasNext()) {
                String key = it.next().toString();
                Object value = json_o.get(key);
                if (value.getClass() == JSONObject.class) {
                    BasicDBObject Q2 = (BasicDBObject) process(new BasicDBObject(), value);
                    dbo.append(key, Q2);
                }
                else if (value.getClass() == JSONArray.class) {
                    BasicDBList Q2 = (BasicDBList) process(new BasicDBObject(), value);
                    dbo.append(key, Q2);
                }
                else {
                    dbo.append(key, value);
                }
            }
        }
        else if (clazz == JSONArray.class) {
            JSONArray array = (JSONArray) jso;
            Iterator it = array.iterator();
            BasicDBList list = new BasicDBList();
            while (it.hasNext()) {
                Object next = it.next();
                if (next.getClass() == JSONArray.class || next.getClass() == JSONObject.class) {
                    list.add(process(new BasicDBObject(), next));
                }
                else {
                    list.add(next);
                }
            }
            return list;
        }        
        return dbo;        
    }
}