Vous n'êtes pas identifié(e).
Pages : 1
Bonjour à tous,
J'ai une requête que je souhaiterai convertir en un format de données JSON grâce aux fonctions postgresql.
voici un exemple de mon code :
select row_to_json(t)
from (
select text, pronunciation,
(
select array_to_json(array_agg(row_to_json(d))) \\ un objet tableau
from (
select part_of_speech, body \\ les informations qui sont censées s'imbriquer dans le tableau
from definitions
where word_id=words.id
order by position asc
) d
) as definitions
from words
where text = 'autumn'
) t
Mon problème se situe au niveau de l’imbrication, cela ne s'imbrique pas du tout mais duplique les lignes "text" et "pronunciation" pour afficher toutes les "definitions"
Voici le résultat attendu :
{
"text": "autumn",
"pronunciation": "autumn",
"definitions": [
{
"part_of_speech": "noun",
"body": "skilder wearifully uninfolded..."
},
{
"part_of_speech": "verb",
"body": "intrafissural fernbird kittly..."
},
{
"part_of_speech": "adverb",
"body": "infrugal lansquenet impolarizable..."
}
]
}
Or j'obtiens le résultat suivant qui n'est pas du tout satisfaisant :
{
"text": "autumn",
"pronunciation": "autumn",
"definitions": [
{
"part_of_speech": "noun",
"body": "skilder wearifully uninfolded..."
}
]
"text": "autumn",
"pronunciation": "autumn",
"definitions": [
{
"part_of_speech": "noun",
"body": "intrafissural fernbird kittly..."
},
]
"text": "autumn",
"pronunciation": "autumn",
"definitions": [
{
"part_of_speech": "noun",
"body": "infrugal lansquenet impolarizable..."
},
]
}
Je sèche complément sur le coup j'ai beau cherché je ne trouve aucune explication ni solution !
Merci pour votre aide.
Hors ligne
Il ne semble pas y avoir d'erreur dans la requête mais le résultat dépend aussi de la structure et du contenu des tables ...
Hors ligne
À mon avis, vu ce que vous voulez faire, il vous faut un array_agg en plus: à l'heure actuelle, vous avez 3 records qui se suivent, chacun en json. Ce que vous voulez, c'est produire un tableau (avec le array_agg) et convertir ce tableau en json…
Marc.
Hors ligne
Pages : 1