I presume you are subscribed to the commits list, which broadcasts our CI results?
testjson : FAILED 1 of 7Line 62: expected something other than <{ "Image" : { "Width" : 800 , "IDs" : [116, 943, 234, 38793], "Title" : "View from 15th Floor", "Animated" : false, "Thumbnail" : { "Height" : 125, "Width" : 100, "Url" : "http://www.example.com/image/481989943" }, "Height" : 600 }}>, but saw <{"Image": {"Width": 800 ,"IDs": [116, 943, 234, 38793],"Title": "View from 15th Floor","Animated": false,"Thumbnail": {"Height": 125,"Width": 100,"Url": "http://www.example.com/image/481989943" },"Height": 600 }}q�k� >Failed Tests Total Fail Failed % =================================================== testjson 7 1 14.29% On Fri, Aug 31, 2018 at 7:25 AM, <yla...@apache.org> wrote: > Author: ylavic > Date: Fri Aug 31 12:25:34 2018 > New Revision: 1839755 > > URL: http://svn.apache.org/viewvc?rev=1839755&view=rev > Log: > apr_json: object keys are strings. > > Make this clear in the API by requiring a usual string in > apr_json_object_set() > and creating the apr_json_string_t from it. > > It's also more user friendly as otherwise apr_json_string_create() is to be > used when setting an entry. > > Also, axe the 'pool' arg from apr_json_array_add() since it's not needed. > > Modified: > apr/apr/trunk/include/apr_json.h > apr/apr/trunk/json/apr_json.c > apr/apr/trunk/json/apr_json_decode.c > > Modified: apr/apr/trunk/include/apr_json.h > URL: http://svn.apache.org/viewvc/apr/apr/trunk/include/apr_ > json.h?rev=1839755&r1=1839754&r2=1839755&view=diff > ============================================================ > ================== > --- apr/apr/trunk/include/apr_json.h (original) > +++ apr/apr/trunk/include/apr_json.h Fri Aug 31 12:25:34 2018 > @@ -178,7 +178,7 @@ struct apr_json_object_t { > * Use apr_json_array_create() to allocate. > */ > struct apr_json_array_t { > - /** The key value pairs in the object are in this list */ > + /** The values in the array are in this list */ > APR_RING_HEAD(apr_json_array_list_t, apr_json_value_t) list; > /** Array of JSON objects */ > apr_array_header_t *array; > @@ -271,8 +271,9 @@ APR_DECLARE(apr_json_value_t *) > /** > * Associate a value with a key in a JSON object. > * @param obj The JSON object. > - * @param key Pointer to the key string, including any whitespace > - * required. > + * @param key Pointer to the key. > + * @param klen Length of the key, or APR_JSON_VALUE_STRING if NUL > + * terminated. > * @param val Value to associate with the key. > * @param pool Pool to use. > * @return APR_SUCCESS on success, APR_EINVAL if the key is > @@ -280,20 +281,19 @@ APR_DECLARE(apr_json_value_t *) > * @remark If the value is NULL the key value pair is deleted. > */ > APR_DECLARE(apr_status_t) apr_json_object_set(apr_json_value_t *obj, > - apr_json_value_t *key, apr_json_value_t *val, > - apr_pool_t *pool) __attribute__((nonnull(1, 4))); > + const char *key, apr_ssize_t klen, apr_json_value_t *val, > + apr_pool_t *pool) __attribute__((nonnull(1, 2, 5))); > > /** > * Look up the value associated with a key in a JSON object. > * @param obj The JSON object. > * @param key Pointer to the key. > * @param klen Length of the key, or APR_JSON_VALUE_STRING if NUL > - * terminated. > + * terminated. > * @return Returns NULL if the key is not present. > */ > -APR_DECLARE(apr_json_kv_t *) > - apr_json_object_get(apr_json_value_t *obj, const char *key, > - apr_ssize_t klen) > +APR_DECLARE(apr_json_kv_t *) apr_json_object_get(apr_json_value_t *obj, > + const char *key, apr_ssize_t klen) > __attribute__((nonnull(1, 2))); > > /** > @@ -325,13 +325,12 @@ APR_DECLARE(apr_json_kv_t *) apr_json_ob > * Add the value to the end of this array. > * @param arr The JSON array. > * @param val Value to add to the array. > - * @param pool Pool to use. > * @return APR_SUCCESS on success, APR_EINVAL if the array value is not > * an APR_JSON_ARRAY. > */ > APR_DECLARE(apr_status_t) apr_json_array_add(apr_json_value_t *arr, > - apr_json_value_t *val, apr_pool_t *pool) > - __attribute__((nonnull(1, 2, 3))); > + apr_json_value_t *val) > + __attribute__((nonnull(1, 2))); > > /** > * Look up the value associated with a key in a JSON object. > > Modified: apr/apr/trunk/json/apr_json.c > URL: http://svn.apache.org/viewvc/apr/apr/trunk/json/apr_json.c? > rev=1839755&r1=1839754&r2=1839755&view=diff > ============================================================ > ================== > --- apr/apr/trunk/json/apr_json.c (original) > +++ apr/apr/trunk/json/apr_json.c Fri Aug 31 12:25:34 2018 > @@ -129,25 +129,23 @@ apr_json_value_t *apr_json_null_create(a > return json; > } > > -apr_status_t apr_json_object_set(apr_json_value_t *object, > apr_json_value_t *key, > - apr_json_value_t *val, apr_pool_t *pool) > +apr_status_t apr_json_object_set(apr_json_value_t *object, const char > *key, > + apr_ssize_t klen, apr_json_value_t *val, apr_pool_t *pool) > { > apr_json_kv_t *kv; > apr_hash_t *hash; > > - if (object->type != APR_JSON_OBJECT || !key > - || key->type != APR_JSON_STRING) { > + if (object->type != APR_JSON_OBJECT) { > return APR_EINVAL; > } > > hash = object->value.object->hash; > > - kv = apr_hash_get(hash, key->value.string.p, key->value.string.len); > + kv = apr_hash_get(hash, key, klen); > > if (!val) { > if (kv) { > - apr_hash_set(hash, key->value.string.p, key->value.string.len, > - NULL); > + apr_hash_set(hash, key, klen, NULL); > APR_RING_REMOVE((kv), link); > } > return APR_SUCCESS; > @@ -157,11 +155,10 @@ apr_status_t apr_json_object_set(apr_jso > kv = apr_palloc(pool, sizeof(apr_json_kv_t)); > APR_RING_ELEM_INIT(kv, link); > APR_JSON_OBJECT_INSERT_TAIL(object->value.object, kv); > - apr_hash_set(hash, key->value.string.p, key->value.string.len, > - kv); > + kv->k = apr_json_string_create(pool, key, klen); > + apr_hash_set(hash, kv->k->value.string.p, > kv->k->value.string.len, kv); > } > > - kv->k = key; > kv->v = val; > > return APR_SUCCESS; > @@ -212,8 +209,7 @@ apr_json_kv_t *apr_json_object_next(apr_ > } > } > > -apr_status_t apr_json_array_add(apr_json_value_t *arr, > - apr_json_value_t *val, apr_pool_t *pool) > +apr_status_t apr_json_array_add(apr_json_value_t *arr, apr_json_value_t > *val) > { > apr_array_header_t *array; > > @@ -316,7 +312,8 @@ apr_json_value_t *apr_json_overlay(apr_p > if (!apr_hash_get(overlay->value.object->hash, > kv->k->value.string.p, > kv->k->value.string.len)) { > > - apr_json_object_set(res, kv->k, kv->v, p); > + apr_json_object_set(res, kv->k->value.string.p, > + kv->k->value.string.len, kv->v, p); > > } > else if (APR_JSON_FLAGS_STRICT & flags) { > @@ -329,7 +326,8 @@ apr_json_value_t *apr_json_overlay(apr_p > kv != APR_RING_SENTINEL(&(overlay->value.object)->list, > apr_json_kv_t, link); > kv = APR_RING_NEXT((kv), link)) { > > - apr_json_object_set(res, kv->k, kv->v, p); > + apr_json_object_set(res, kv->k->value.string.p, > + kv->k->value.string.len, kv->v, p); > > } > > > Modified: apr/apr/trunk/json/apr_json_decode.c > URL: http://svn.apache.org/viewvc/apr/apr/trunk/json/apr_json_ > decode.c?rev=1839755&r1=1839754&r2=1839755&view=diff > ============================================================ > ================== > --- apr/apr/trunk/json/apr_json_decode.c (original) > +++ apr/apr/trunk/json/apr_json_decode.c Fri Aug 31 12:25:34 2018 > @@ -390,8 +390,7 @@ static apr_status_t apr_json_decode_arra > return status; > } > > - if (APR_SUCCESS > - != (status = apr_json_array_add(array, element, > self->pool))) { > + if (APR_SUCCESS != (status = apr_json_array_add(array, element))) > { > return status; > } > > @@ -501,7 +500,8 @@ static apr_status_t apr_json_decode_obje > if ((status = apr_json_decode_value(self, &value))) > goto out; > > - apr_json_object_set(json, key, value, self->pool); > + apr_json_object_set(json, key->value.string.p, > key->value.string.len, > + value, self->pool); > > if (self->p == self->e) { > status = APR_EOF; > > >