json-utils: fix overriding of non-container values when merging
Non-container values should always be overriden Fixes: #653
This commit is contained in:
@@ -211,12 +211,12 @@ merge_json_objects (WpSpaJson *a, WpSpaJson *b)
|
||||
g_return_val_if_fail (wp_iterator_next (it, &item), NULL);
|
||||
val = g_value_dup_boxed (&item);
|
||||
|
||||
if (!override &&
|
||||
if (!override && wp_spa_json_is_container (val) &&
|
||||
(wp_spa_json_object_get (a, key_str, "J", &j, NULL) ||
|
||||
wp_spa_json_object_get (a, override_key_str, "J", &j, NULL))) {
|
||||
g_autoptr (WpSpaJson) merged = wp_json_utils_merge_containers (j, val);
|
||||
if (!merged) {
|
||||
wp_warning ("skipping merge of %s as JSON values are not compatible",
|
||||
wp_warning ("skipping merge of %s as JSON values are not compatible containers",
|
||||
key_str);
|
||||
continue;
|
||||
}
|
||||
|
@@ -241,6 +241,7 @@ assert (type (val.args.test) == "table")
|
||||
assert (val.args.test[1] == 0)
|
||||
assert (val.args.test[2] == 1)
|
||||
|
||||
-- merge
|
||||
json = Json.Array { "foo" }
|
||||
json2 = Json.Array { "bar" }
|
||||
json = json:merge(json2)
|
||||
@@ -263,3 +264,9 @@ assert (val["1"] == 1)
|
||||
assert (val["2"] == 2)
|
||||
assert (val["3"] == 3)
|
||||
assert (val["4"] == 4)
|
||||
|
||||
json = Json.Object { ["a"] = "foo" }
|
||||
json2 = Json.Object { ["a"] = "bar" }
|
||||
json = json:merge(json2)
|
||||
val = json:parse ()
|
||||
assert (val["a"] == "bar")
|
||||
|
Reference in New Issue
Block a user