ssize_t objectSize(const pbnjson::JValue& value) { ssize_t result = 0; for (pbnjson::JValue::ObjectConstIterator i = value.begin(); i != value.end(); i++) result++; return result; }
static void statistics(pbnjson::JValue json, JSONStats &stats) { if (json.isObject()) { stats.numObjects++; pbnjson::JValue::ObjectIterator i; for (i = json.begin(); i != json.end(); i++) { stats.numKeys ++; stats.keySize += (*i).first.asString().length(); pbnjson::JValue child = (*i).second; statistics(child, stats); } } else if (json.isArray()) { stats.numArrays++; stats.numElements += json.arraySize(); for (ssize_t i = 0; i < json.arraySize(); i++) { statistics(json, stats); } } else if (json.isString()) { stats.numStrings++; stats.stringSize += json.asString().length(); } else if (json.isNumber()) { stats.numNumbers++; } else if (json.isBoolean()) { stats.numBooleans++; } else if (json.isNull()) { stats.numNulls++; } }