//from object to JSON
Gson gson = new Gson();
gson.toJson(yourObject);
// from JSON to object
yourObject o = gson.fromJson(JSONString,yourObject.class);
Response response = request.get(); // REST call
JsonReader jsonReader = Json.createReader(new StringReader(response.readEntity(String.class)));
JsonArray jsonArray = jsonReader.readArray();
ListIterator l = jsonArray.listIterator();
while ( l.hasNext() ) {
JsonObject j = (JsonObject)l.next();
JsonObject ciAttr = j.getJsonObject("ciAttributes");
Я нашел решение. В предыдущем вызове Object.bsonsize mongo возвратил размер КУРСОРА, а не самого документа.
Правильный способ заключается в использовании этой команды:
Object.bsonsize(db.test.findOne({type:"auto"}))
это вернет правильный размер конкретного документа (в байтах).
Я рекомендовал использовать этот скрипт, чтобы получить реальный размер.
db.users.find().forEach(function(obj)
{
var size = Object.bsonsize(obj);
print('_id: '+obj._id+' || Size: '+size+'B -> '+Math.round(size/(1024))+'KB -> '+Math.round(size/(1024*1024))+'MB (max 16MB)');
});
Примечание. Если ваши идентификаторы являются 64-битными целыми числами, вышесказанное усечет значение идентификатора при печати! Если это так, вы можете использовать вместо этого:
db.users.find().forEach(function(obj)
{
var size = Object.bsonsize(obj);
var stats =
{
'_id': obj._id,
'bytes': size,
'KB': Math.round(size/(1024)),
'MB': Math.round(size/(1024*1024))
};
print(stats);
});
Это также имеет преимущество возврата JSON, поэтому графический интерфейс, подобный RoboMongo, может его табулировать!
source: https://stackoverflow.com/a/16957505/3933634
edit: благодаря @zAlbee для вашего предложения.
Эффективный объем пространства, который будет принимать документ в коллекции, будет больше, чем размер вашего документа из-за механизма Record Padding .
Вот почему разница между выходами db.test.stats()
и Object.bsonsize(..)
.
Чтобы получить точный размер (в байтах) документа, придерживайтесь функции Object.bsonsize()
.