A IMO better approach: converting the array
to object
for easier overloading, then ab-using the fact that jsonnet handles objects by alpha-sorting its keys:
$ cat foo.jsonnet
local array_a = [
{ env: "something" },
{ var: "bar" },
];
local array_b = [
{},
{ extra: "stuff" },
];
// "Standarize" index key string as "%06d"
local _idx(i) = ("%06d" % [i]);
// Convert array [elem1, elem2, ...] to object as { 000000: elem0, 000001: elem1, ...}
local _to_obj(a) = std.foldl(
function(x, y) x + y,
std.mapWithIndex(function(i, v) { [_idx(i)]: v }, a),
{}
);
local _to_array(obj) = [obj[k] for k in std.objectFields(obj)];
_to_array(std.mergePatch(_to_obj(array_a), _to_obj(array_b)))
$ jsonnet foo.jsonnet
[
{
"env": "something"
},
{
"extra": "stuff",
"var": "bar"
}
]