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++; } }
static void convert(const pbnjson::JValue &j, int &v) { LG_ASSERT(j.isNumber()); v = j.asNumber<int>(); }
static void convert(const pbnjson::JValue &j, double &v) { LG_ASSERT(j.isNumber()); v = j.asNumber<double>(); }