map fields to an array preventing nulls
joaopastor opened this issue · 2 comments
joaopastor commented
Hey there,
how could I achieve the following:
Input:
{
"id": 1,
"field1": "val1",
"field3": "val3"
}
Desired Output:
{
"id" : 1,
"fields" : [
{
"field_name" : "field1",
"field_value" : "val1"
},
{
"field_name" : "field3",
"field_value" : "val3"
}
]
}
Actual output:
{
"id" : 1,
"fields" : [
{
"field_name" : "field1",
"field_value" : "val1"
},
null,
{
"field_name" : "field3",
"field_value" : "val3"
}
]
}
using the following jslt:
{
"id": .id,
"fields": [
if (.field1)
{
"field_name" : "field1",
"field_value" : .field1
},
if(.field2)
{
"field_name" : "field2",
"field_value" : .field2
},
if(.field3)
{
"field_name" : "field3",
"field_value" : .field3
}
]
}
How could I do it so that I don't have nulls in the array?
larsga commented
You need to make the array first, then filter it.
Something like this:
let fields = [
if (.field1)
{
"field_name" : "field1",
"field_value" : .field1
},
if(.field2)
{
"field_name" : "field2",
"field_value" : .field2
},
if(.field3)
{
"field_name" : "field3",
"field_value" : .field3
}
]
{
"id": .id,
"fields": [for ($fields) . if (.)]
}
joaopastor commented
thanks, works like a charm.