예제 #1
0
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;
}
예제 #2
0
    static void
    convert(const pbnjson::JValue &j, hl::optional<Type>& v)
    {
        if(j.isNull())
        {
            v.set_is_set(false);
            return;
        }
        v.set_is_set(true);

        //
        // Delegate the conversion to the basic
        // conversion type
        conversion<Type>::convert(j, v.get());
    }
예제 #3
0
 static void convert(const pbnjson::JValue &j, int &v)
 {
     LG_ASSERT(j.isNumber());
     v = j.asNumber<int>();
 }
예제 #4
0
 static void convert(const pbnjson::JValue &j, double &v)
 {
     LG_ASSERT(j.isNumber());
     v = j.asNumber<double>();
 }
예제 #5
0
 static void convert(const pbnjson::JValue &j, std::string &v)
 {
     LG_ASSERT(j.isString());
     v = j.asString();
 }
예제 #6
0
 static void convert(const pbnjson::JValue &j, bool &v)
 {
     LG_ASSERT(j.isBoolean());
     v = j.asBool();
 }
예제 #7
0
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++;
	}
}