Maison >base de données >tutoriel mysql >Comment convertir un tableau d'objets SQL Server en un tableau de valeurs en JSON ?

Comment convertir un tableau d'objets SQL Server en un tableau de valeurs en JSON ?

Barbara Streisand
Barbara Streisandoriginal
2025-01-09 18:56:41972parcourir

How to Convert a SQL Server Array of Objects to an Array of Values in JSON?

Conversion JSON SQL Server 2016 : transformer des tableaux d'objets en tableaux de valeurs

Les fonctionnalités JSON de SQL Server 2016 sont puissantes, mais la conversion de tableaux d'objets en tableaux de valeurs nécessite une approche spécifique. Illustrons le défi et la solution.

Considérez ce scénario :

<code class="language-sql">CREATE TABLE #temp (item_id VARCHAR(256))

INSERT INTO #temp VALUES ('1234'),('5678'),('7890')

SELECT * FROM #temp

-- Initial JSON conversion attempt
SELECT (SELECT item_id 
FROM #temp
FOR JSON PATH,root('ids')) </code>

Cela donne un tableau JSON de objets :

<code class="language-json">{
    "ids": [{
        "item_id": "1234"
    },
    {
        "item_id": "5678"
    },
    {
        "item_id": "7890"
    }]
}</code>

L'objectif, cependant, est un tableau JSON de valeurs :

<code class="language-json">{
  "ids": [
    "1234",
    "5678",
    "7890"
  ]
}</code>

La clé est d'exploiter XML comme étape intermédiaire :

<code class="language-sql">SELECT  
JSON_QUERY('[' + STUFF(( SELECT ',' + '"' + item_id + '"' 
FROM #temp FOR XML PATH('')),1,1,'') + ']' ) ids  
FOR JSON PATH , WITHOUT_ARRAY_WRAPPER </code>

Cette requête construit d'abord une chaîne XML représentant les valeurs, puis utilise STUFF pour supprimer la virgule de début et enfin place le résultat entre crochets pour former un tableau JSON. La clause FOR JSON PATH, WITHOUT_ARRAY_WRAPPER garantit que la sortie est un seul tableau de valeurs JSON, et non un tableau contenant un seul objet. Cela permet d'obtenir efficacement la structure JSON souhaitée.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn