118 votes

Analyser JSON dans TSQL

Est-il possible d'analyser JSON sur TSQL ?

Je ne veux pas créer un JSON plutôt qu'une chaîne de caractères. JSON passée en tant que parameter .

242voto

Phil Factor Points 1333

Il semble que j'aie un énorme penchant masochiste en ce sens que j'ai écrit un analyseur JSON. Il convertit un document JSON en une table de liste d'adjacence SQL, qui est facile à utiliser pour mettre à jour vos tables de données. En fait, j'ai fait pire, car j'ai écrit du code pour faire le processus inverse, c'est-à-dire passer d'une table hiérarchique à une chaîne JSON.

L'article et le code sont ici : Consommation de chaînes Json dans le serveur SQL .

Select * from parseJSON('{
  "Person":
  {
     "firstName": "John",
     "lastName": "Smith",
     "age": 25,
     "Address":
     {
        "streetAddress":"21 2nd Street",
        "city":"New York",
        "state":"NY",
        "postalCode":"10021"
     },
     "PhoneNumbers":
     {
        "home":"212 555-1234",
        "fax":"646 555-4567"
     }
  }
}
')

Pour obtenir :

enter image description here

0 votes

Il s'agit d'une fonctionnalité intéressante, mais qui présente certaines limites, par exemple la suppression du "-" des nombres négatifs.

0 votes

Très cool ! vous avez une coquille dans le script : IF OBJECT_ID (N'dbo.parseJSON') IS NOT NULL DROP FUNCTION dbo.JSONEscaped GO -- devrait tester pour dbo.JSONEscaped dans le test IF.

0 votes

@phil dbo.parseJSON fonctionne très lentement en cas de données volumineuses. Pouvons-nous réduire le temps d'exécution en utilisant d'autres méthodes ?

63voto

gbn Points 197263

Mise à jour : à partir de SQL Server 2016 l'analyse syntaxique de JSON dans TSQL est désormais possible .

En natif, il n'y a pas de support. Vous devrez utiliser le CLR. C'est aussi simple que cela, sauf si vous êtes masochiste et que vous voulez écrire un analyseur JSON en SQL.

Normalement, les gens demandent une sortie JSON de la base de données et il existe des exemples sur Internet. Mais dans une base de données ?

62 votes

JSON est un protocole assez simple, qui ne nécessite pas une grande dose de masochisme. Une fois que vous l'avez, vous pouvez utiliser la même routine pour tout votre JSON. Quoi qu'il en soit, je l'ai fait pour vous ici. simple-talk.com/sql/t-sql-programming/

11 votes

Phil Factor : Je lis vos articles depuis de nombreuses années. Si vous n'aviez pas écrit cet article aujourd'hui Je l'aurais probablement cité il y a 6 mois quand j'ai répondu...

10 votes

Il existe un support intégré pour l'analyse du texte JSON dans le nouveau SQL Server 2016.

26voto

Irvin Dominin Points 15736

Enfin, SQL Server 2016 ajoutera le support natif de JSON !

Réf :

Parmi les fonctionnalités supplémentaires de SQL Server 2016, citons :

  • Améliorations supplémentaires de la sécurité au niveau des rangées et du masquage dynamique des données pour compléter nos investissements en matière de sécurité avec Always.
    Cryptée.
  • Améliorations apportées à AlwaysOn pour une disponibilité et une reprise après sinistre plus robustes avec plusieurs répliques synchrones et une charge secondaire.
    équilibrage.
  • Prise en charge native de JSON pour offrir de meilleures performances et une prise en charge de vos nombreux types de données.
  • Les outils SQL Server Enterprise Information Management (EIM) et Analysis Services bénéficient d'une mise à niveau en termes de performances, de convivialité et d'évolutivité. l'évolutivité.
  • Sauvegardes hybrides plus rapides, scénarios de haute disponibilité et de reprise après sinistre pour sauvegarder et restaurer vos bases de données sur site vers Azure.
    et placez vos serveurs SQL AlwaysOn secondaires dans Azure.

Annonce : http://blogs.technet.com/b/dataplatforminsider/archive/2015/05/04/sql-server-2016-public-preview-coming-this-summer.aspx

Article de blog sur les caractéristiques : http://blogs.msdn.com/b/jocapc/archive/2015/05/16/json-support-in-sql-server-2016.aspx

8voto

Mairaj Points 12196

Le serveur SQL 2016 prend en charge json data l'analyse syntaxique en utilisant OPENJSON . Vous pouvez utiliser OPENJSON à la carte json data aux lignes et aux colonnes.

Votre json Data

[
 { "id" : 2,"name": "John"},
 { "id" : 5,"name": "John"}
]

Voici comment vous pouvez gérer le json dans sql

//@pJson is json data passed from code.  

INSERT INTO YourTable (id, Name)
 SELECT id, name
 FROM OPENJSON(@pJson)
 WITH (id int,
       name nvarchar(max))

Ici est un article détaillé qui couvre ce sujet.

5voto

jsegarra Points 91

J'ai aussi un énorme penchant masochiste qui m'a poussé à écrire un autre analyseur JSON. Celui-ci utilise une approche procédurale. Il utilise une table de liste hiérarchique SQL similaire pour stocker les données analysées. Aussi dans le paquet sont :

  • Processus inverse : de la hiérarchie à JSON
  • Fonctions d'interrogation : pour extraire des valeurs particulières d'un objet JSON.

N'hésitez pas à l'utiliser et à vous amuser avec elle.

http://www.codeproject.com/Articles/1000953/JSON-for-Sql-Server-Part

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X