Read a quoted string from the input stream.
MCO_RET mcorest_api_json_read_string( mcorest_api_json_read_ctx_t *ctx,
int as_key,
int cont,
char *buf,
int *len);
| ctx | Pointer to the JSON read context structure |
| as_key | Set to non-zero to treat the string value as a JSON key |
| cont | Set to non-zero in subsequent calls to function mcorest_api_json_read_string() to retrieve consecutive fragments of the string |
| buf | The buffer to read data into (this buffer is never zero-terminated) |
| len | On input, defines the size of the buffer. On output, returns the actual number of characters written into the buffer |
This function reads a quoted string from the input stream. It is possible that the JSON string does not fit into the provided buffer. In this case, the output value of
lenwill be the same as the input value. The following fragment(s) of the string can be read with subsequent calls to this function with thecontflag set to a non-zero value. If the JSON string fits into the buffer, the outputlenvalue will always be smaller than the input value. No subsequent calls to this function should be made in this case. The buffer is never zero-terminated. Both keys and string values in JSON have the same format. The JSON reader does not track the JSON context, and thus cannot differentiate keys from string values. The application should set theas_keyflag to a non-zero value if it expects the string to be a key. An error will be returned if this flag is not set but the string turns out to be a key (i.e. is followed by ':'), or vice versa
| MCO_S_OK = 0 | Success |
| MCO_E_REST_* | Any of the Web Services Error Codes |
static void read_object(void *ctx, mcohs_request_h req);
{
MCOREST_API_JSON_TKN_TYPE tkn = MCOREST_API_JSON_TKN_UNKNOWN;
mcorest_api_json_read_ctx_t jctx;
mcorest_api_stream_t jstream;
char key[32];
int len = sizeof(key);
long l;
mcorest_api_stream_with_request(req, &jstream);
mcorest_api_json_read_start(&jstream, &jctx);
// Start reading the top-level JSON object
mcorest_api_json_next_token(&jctx, MCOREST_API_JSON_TKN_OBJECT_BGN, NULL);
mcorest_api_json_read_object_begin(&jctx);
// Read first key in the top-level object
mcorest_api_json_next_token(&jctx, MCOREST_API_JSON_TKN_UNKNOWN, &tkn);
while (tkn == MCOREST_API_JSON_TKN_STRING)
{
// As long as we're getting strings from the object, we interpret them as keys,
// and then read the values
mcorest_api_json_read_string(&jctx, 1, 0, key, &len);
// Read the value type
mcorest_api_json_next_token(&jctx, MCOREST_API_JSON_TKN_UNKNOWN, &tkn);
if ((0 == strcmp(key, "max_records") && (tkn == MCOREST_API_JSON_TKN_NUMBER))
{
mcorest_api_json_read_long(&jctx, &l);
}
...
mcorest_api_json_next_token(&jctx, MCOREST_API_JSON_TKN_UNKNOWN, &tkn);
}
mcorest_api_json_read_object_end(jctx);
...
}