Erro JSON ao usar nó de código após execução de subfluxo de trabalho

Descreva o problema/erro/pergunta

Após executar um subfluxo de trabalho, recebo um objeto JSON. Se tento fazer uma edição simples usando código de nó, recebo um erro na saída JSON: Formato de saída inválido [item 0] Um item de saída contém a chave reservada json. Para contornar isso, coloque cada item em um objeto, sob uma chave chamada json.
A única solução que encontrei foi deletar a chave metadata do item.
Acredito que este não é o comportamento esperado.

for (const item of $input.all()) {
delete item.metadata;
}
return $input.all();

Por favor, compartilhe seu fluxo de trabalho

Compartilhe a saída retornada pelo último nó

Formato de saída inválido [item 0]
Um item de saída contém a chave reservada json. Para contornar isso, coloque cada item em um objeto, sob uma chave chamada json.

Informações sobre sua configuração n8n

  • versão n8n: 2.19.2
  • Banco de dados (padrão: SQLite): postgres
  • Configuração EXECUTIONS_PROCESS do n8n (padrão: own, main): ?
  • Executando n8n via (Docker, npm, n8n cloud, aplicativo desktop): docker
  • Sistema operacional: ubuntu

Oi @jgggr, enquanto você espera uma resposta, aqui estão algumas coisas que podem ajudar:

Recursos sugeridos

Correspondência automática com sua pergunta.

Docs:

Fórum:

@David_Streuli, @Matze202 - vocês já ajudaram com problemas semelhantes antes, dão uma olhada?

Sugerido automaticamente pelo bot da comunidade do n8n. É um piloto - compartilhe feedback aqui.

Oi @jgggr
O nó Execute Sub-workflow adiciona uma chave metadata de nível superior a cada item que retorna, que é o que o link “View sub-execution” usa, e o nó Code apenas permite json, binary, pairedItem e error como chaves de nível superior em um item de saída, então return $input.all() é rejeitado. Construa os itens de saída em vez de retornar os itens de entrada:

return $input.all().map((item, i) => {
  const json = { ...item.json };
  if (json.agent_name === "example") json.agent_name = "other example";
  return { json, pairedItem: i };
});

pairedItem mantém o linking de itens funcionando para os nós posteriores.

Isso foi reportado upstream e fechado como obsoleto, então construir os itens é a solução por enquanto:

Obrigado por nos informar sobre isso, criamos NODE-5788 como o ticket interno de desenvolvimento para investigar.

Obrigado pela sua resposta.

A solução alternativa que você descreve acredito que é a mesma coisa que sugeri (deletar a chave de metadados), certo?

O issue do GitHub que você mencionou é exatamente o problema que descrevi.

A mesma ideia, e para os itens que realmente são limpos o resultado é idêntico. A versão no JSON do fluxo de trabalho que você colou não é equivalente porém: delete item.metadata fica dentro do ramo case "example":, então apenas itens cujo agent_name corresponde são limpos e todos os outros itens ainda carregam metadata e disparam o mesmo erro. Construir o item de saída cobre todos eles sem um ramo, e continua funcionando se o nó retornar outra chave de nível superior junto com metadata.