Digamos que temos uma tabela de banco de dados como esta:
CREATE TABLE tbl (id INT PRIMARY KEY, data JSON);
e dados json como estes:
INSERT INTO tbl (data) VALUES ('[
{
"name": "object 1",
"key": "value 1",
"unwanted key": "unwanted value 1"
},
{
"name": "object 2",
"key": "value 2",
"unwanted key": "unwanted value 2"
}
]');
Agora eu gostaria de extrair apenas parte dos dados, mantendo-os como uma lista de objetos, onde cada objeto tem apenas o name
e o e a key
chave, mas não o unwanted key
. Além disso, se eu tiver várias linhas com a mesma lista estruturada na coluna de dados, preciso diferenciar (por id, por exemplo), ao selecionar todos os dados.
Tentei fazer isso com uma combinação de json_each
e json_extract
como neste exemplo , mas isso me dá um resultado para cada objeto em uma lista, não para cada lista e não consegui descobrir como mudar isso.
Também seria possível simplesmente dividir a tabela e criar uma nova coluna apenas para o unwanted key
, mas isso me deixaria juntar tudo em outro ponto da aplicação. Mas se a consulta for impossível com essa estrutura, eu voltaria a alterar o esquema.
Edite para adicionar o resultado esperado:
digamos que inserimos a mesma lista duas vezes. Gostaria de obter esta saída:
eu ia | dados |
---|---|
1 | [{"nome": "objeto 1", "chave": "valor 1"}, {"nome": "objeto 2", "chave": "valor 2"}] |
2 | [{"nome": "objeto 1", "chave": "valor 1"}, {"nome": "objeto 2", "chave": "valor 2"}] |