Eu tenho um JSON:
[
{
"datetime": "2025-04-07T18:03:50+03:00",
"title": "Theme Drive",
"content": {
"adPlacement": {
"id": 4289485,
"name": "otclick_OLV_apart_jan_mar_In_stream",
"banners": {
"href": [
"https://api.adriver.ru/banners/12037384",
"https://api.adriver.ru/banners/12043208",
"https://api.adriver.ru/banners/11887226",
"https://api.adriver.ru/banners/12028437"
]
}
}
}
}
]
Quero construir o json abaixo: separar os elementos do array em objetos com propriedade banner_id
e armazenar os dígitos como valor depoisbanners/
Espero esta saída:
[
{
"banner_id": 12037384
},
{
"banner_id": 12043208
},
{
"banner_id": 11887226
},
{
"banner_id": 12028437
}
]
Escrevi:
[
{
"operation": "shift",
"spec": {
"*": {
"content": {
"adPlacement": {
"banners": {
"href": {
"*": "[&]"
}
}
}
}
}
}
}
]
Acabei de obter um array (não como esperado) e também estou com dificuldades com banner_ids. Para dividir, tentei algo assim: "banner_id": "=split('banners/', @(1,&))"
, mas retorna um erro. Como obter a saída esperada?
Atualizar
Segundo cenário com um objeto dentro href
:
[
{
"datetime":"2025-04-07T18:03:50+03:00",
"title":"Theme Drive",
"content":{
"adPlacement":{
"id":4289485,
"name":"otclick_OLV_apart_jan_mar_In_stream",
"banners":{
"href":"https://api.adriver.ru/banners/12037384"
}
}
}
}
]
Esperado:
[
{
"banner_id": 12037384
}
]
Meu resultado:
[
{
"operation": "shift",
"spec": {
"*": {
"content": {
"adPlacement": {
"banners": {
"href": {
"*": {
"*banners/*": {
"$(0,2)": "[&2].banner_id"
}
},
"*banners/*": {
"$(0,2)": "[0].banner_id"
}
}
}
}
}
}
}
},
{
"operation": "modify-overwrite-beta",
"spec": {
"*": {
"banner_id": "=toInteger"
}
}
}
]
A
[&]
sintaxe não funcionava bem porque apenas movia oshref
valores como estavam, sem atribuir a eles uma chave adequada, comobanner_id
. Isso significava que a saída era apenas uma lista de URLs brutas, sem estrutura. Sem essa estrutura, os próximos passos (como dividir a URL ou extrair números) não saberiam onde aplicar as transformações.A especificação correta corrige isso mapeando cada URL para
banner_id
, organizando os dados em um formato claro de chave-valor. Isso os prepara para as operações posteriores de dividir a URL, capturar o número e transformá-lo em um inteiro. O uso[&]
ignora essa configuração importante, de modo que os dados ficam confusos e inutilizáveis para as etapas seguintes.Aqui está a especificação de trabalho
Você pode tentar a especificação de choque abaixo
Basta usar uma única transformação de deslocamento para dividir os valores, como
onde
a demonstração no site Jolt Transform Demo Using v0.1.1 é:
Atualização : Você pode iniciar uma transformação completa atingindo a seguinte especificação:
para poder cobrir ambos os casos