PARCJSON * parcBasicStats_ToJSON(const PARCBasicStats *stats) { PARCJSON *result = parcJSON_Create(); if (result != NULL) { PARCJSONPair *pair = parcJSONPair_CreateFromDouble("maximum", stats->maximum); parcJSON_AddPair(result, pair); parcJSONPair_Release(&pair); pair = parcJSONPair_CreateFromDouble("minimum", stats->minimum); parcJSON_AddPair(result, pair); parcJSONPair_Release(&pair); pair = parcJSONPair_CreateFromDouble("mean", stats->mean); parcJSON_AddPair(result, pair); parcJSONPair_Release(&pair); pair = parcJSONPair_CreateFromDouble("variance", stats->variance); parcJSON_AddPair(result, pair); parcJSONPair_Release(&pair); pair = parcJSONPair_CreateFromInteger("count", stats->count); parcJSON_AddPair(result, pair); parcJSONPair_Release(&pair); } return result; }
PARCJSONValue * parcJSONValue_ObjectParser(PARCJSONParser *parser) { PARCJSONValue *result = NULL; // absorb the (required) '{' character. if (parcJSONParser_NextChar(parser) == '{') { PARCJSON *json = parcJSON_Create(); while (parcJSONParser_Remaining(parser)) { char c = parcJSONParser_PeekNextChar(parser); if (c == '}') { // Absorb the '}' and terminate. parcJSONParser_NextChar(parser); result = parcJSONValue_CreateFromJSON(json); break; } else if (c == ',') { // absorb the ',' character and continue parcJSONParser_NextChar(parser); } else if (c == '"') { PARCJSONPair *pair = parcJSONPair_Parser(parser); if (pair == NULL) { break; } parcJSON_AddPair(json, pair); parcJSONPair_Release(&pair); } else { break; } } parcJSON_Release(&json); } return result; }
LONGBOW_TEST_CASE(JSON, parcJSON_Add) { PARCJSON *json = parcJSON_Create(); { PARCBuffer *string = parcBuffer_WrapCString("string"); PARCJSONValue *stringValue = parcJSONValue_CreateFromString(string); PARCBuffer *stringName = parcBuffer_WrapCString("string"); PARCJSONPair *pair = parcJSONPair_Create(stringName, stringValue); parcJSON_AddPair(json, pair); parcJSONPair_Release(&pair); parcBuffer_Release(&stringName); parcJSONValue_Release(&stringValue); parcBuffer_Release(&string); } { PARCBuffer *name = parcBuffer_WrapCString("null"); PARCJSONValue *value = parcJSONValue_CreateFromNULL(); PARCJSONPair *pair = parcJSONPair_Create(name, value); parcJSON_AddPair(json, pair); parcJSONPair_Release(&pair); parcBuffer_Release(&name); parcJSONValue_Release(&value); } { PARCBuffer *name = parcBuffer_WrapCString("true"); PARCJSONValue *value = parcJSONValue_CreateFromBoolean(true); PARCJSONPair *pair = parcJSONPair_Create(name, value); parcJSON_AddPair(json, pair); parcJSONPair_Release(&pair); parcBuffer_Release(&name); parcJSONValue_Release(&value); } { PARCBuffer *name = parcBuffer_WrapCString("false"); PARCJSONValue *value = parcJSONValue_CreateFromBoolean(false); PARCJSONPair *pair = parcJSONPair_Create(name, value); parcJSON_AddPair(json, pair); parcJSONPair_Release(&pair); parcBuffer_Release(&name); parcJSONValue_Release(&value); } { PARCBuffer *name = parcBuffer_WrapCString("integer"); PARCJSONValue *value = parcJSONValue_CreateFromInteger(31415); PARCJSONPair *pair = parcJSONPair_Create(name, value); parcJSON_AddPair(json, pair); parcJSONPair_Release(&pair); parcBuffer_Release(&name); parcJSONValue_Release(&value); } { PARCBuffer *name = parcBuffer_WrapCString("float"); PARCJSONValue *value = parcJSONValue_CreateFromFloat(3.1415); PARCJSONPair *pair = parcJSONPair_Create(name, value); parcJSON_AddPair(json, pair); parcJSONPair_Release(&pair); parcBuffer_Release(&name); parcJSONValue_Release(&value); } parcJSON_Release(&json); }