Utilisation de JSONPath - Guide du développeur d'Amazon Kinesis Data Analytics SQL pour applications

Pour les nouveaux projets, nous vous recommandons d'utiliser le nouveau service géré pour Apache Flink Studio plutôt que Kinesis Data Analytics SQL for Applications. Le service géré pour Apache Flink Studio allie facilité d’utilisation et capacités analytiques avancées, ce qui vous permet de créer des applications sophistiquées de traitement des flux en quelques minutes.

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Utilisation de JSONPath

Note

Après le 12 septembre 2023, vous ne pourrez plus créer de nouvelles applications en utilisant Kinesis Data Firehose comme source si vous n’utilisez pas déjà Kinesis Data Analytics pour SQL. Pour plus d’informations, consultez Limites .

JSONPath est une méthode normalisée d'interrogation des éléments d'un objet JSON. JSONPath utilise des expressions de chemin pour parcourir les éléments, les éléments imbriqués et les tableaux d'un document JSON. Pour de plus amples informations sur JSON, veuillez consulter Introducing JSON.

Amazon Kinesis Data Analytics utilise des expressions JSONPath dans le schéma source de l’application pour identifier les éléments de données dans une source de streaming qui contient des données au format JSON.

Pour plus d'informations sur la façon de mapper les données en streaming sur le flux d'entrée de l'application, consultez Mappage d'éléments d'une source de streaming à des colonnes d'entrée SQL.

Accès à des éléments JSON avec JSONPath

Vous découvrirez ci-dessous comment utiliser des expressions JSONPath pour accéder à divers éléments de données au format JSON. Pour les exemples de cette section, supposons que le flux source contient l’enregistrement JSON suivant :

{ "customerName":"John Doe", "address": { "streetAddress": [ "number":"123", "street":"AnyStreet" ], "city":"Anytown" } "orders": [ { "orderId":"23284", "itemName":"Widget", "itemPrice":"33.99" }, { "orderId":"63122", "itemName":"Gadget", "itemPrice":"22.50" }, { "orderId":"77284", "itemName":"Sprocket", "itemPrice":"12.00" } ] }

Accès à des éléments JSON

Pour interroger un élément dans des données JSON à l'aide de JSONPath, utilisez la syntaxe suivante. Ici, $ représente la racine de la hiérarchie des données et elementName est le nom du nœud de l'élément à interroger.

$.elementName

L'expression suivante interroge l'élément customerName de l'exemple JSON précédent.

$.customerName

L'expression précédente retourne les informations suivantes à partir de l'enregistrement JSON précédent.

John Doe
Note

Les expressions de chemin sont sensibles à la casse. L'expression $.customername retourne null à partir de l'exemple JSON précédent.

Note

Si aucun élément n'apparaît à l'emplacement spécifié dans l'expression de chemin, l'expression retourne null. L'expression suivante retourne null à partir de l'exemple JSON précédent, car il n'y a aucun élément correspondant.

$.customerId

Accès aux éléments JSON imbriqués

Pour interroger un élément JSON imbriqué, utilisez la syntaxe suivante.

$.parentElement.element

L'expression suivante interroge l'élément city de l'exemple JSON précédent.

$.address.city

L'expression précédente retourne les informations suivantes à partir de l'enregistrement JSON précédent.

Anytown

Vous pouvez interroger d'autres niveaux de sous-éléments à l'aide de la syntaxe suivante.

$.parentElement.element.subElement

L'expression suivante interroge l'élément street de l'exemple JSON précédent.

$.address.streetAddress.street

L'expression précédente retourne les informations suivantes à partir de l'enregistrement JSON précédent.

AnyStreet

Accès aux tableaux

Vous pouvez accéder aux données dans un tableau JSON de la manière suivante :

  • Récupérer tous les éléments du tableau sous la forme d’une ligne unique.

  • Récupérer chaque élément du tableau sous la forme d’une ligne distincte.

Récupérer tous les éléments du tableau dans une ligne unique.

Pour interroger tout le contenu d'un tableau sur une seule ligne, utilisez la syntaxe suivante.

$.arrayObject[0:]

L'expression suivante interroge tout le contenu de l'élément orders de l'exemple JSON précédent utilisé dans cette section. Elle retourne le contenu du tableau dans une seule colonne et sur une seule ligne.

$.orders[0:]

L'expression précédente retourne les éléments suivants de l'exemple JSON utilisé dans cette section.

[{"orderId":"23284","itemName":"Widget","itemPrice":"33.99"},{"orderId":"61322","itemName":"Gadget","itemPrice":"22.50"},{"orderId":"77284","itemName":"Sprocket","itemPrice":"12.00"}]

Récupérez tous les éléments dans un tableau dans des lignes séparées

Pour interroger chaque élément d'un tableau sur une ligne distincte, utilisez la syntaxe suivante.

$.arrayObject[0:].element

L'expression suivante interroge les éléments orderId de l'exemple JSON précédent et retourne chaque élément du tableau sur une ligne distincte.

$.orders[0:].orderId

L'expression précédente retourne les informations suivantes à partir de l'enregistrement JSON précédent, chaque élément de données étant retourné sur une ligne distincte.

23284

63122

77284

Note

Si un schéma interrogeant des éléments de tableau comporte des expressions interrogeant des éléments autres, ces derniers sont répétés pour chaque élément du tableau. Par exemple, supposons qu'un schéma de l'exemple JSON précédent inclut les expressions suivantes :

  • $.customerName

  • $.orders[0:].orderId

Dans ce cas, les lignes de données retournées de l'exemple d'élément de flux d'entrée ressemble à ce qui suit, l'élément name étant répété pour chaque élément orderId.

Jean Dupont

23284

Jean Dupont

63122

Jean Dupont

77284

Note

Les limitations suivantes s’appliquent aux expressions de tableau dans Amazon Kinesis Data Analytics :

  • Seul un niveau de déréférencement est pris en charge dans une expression de tableau. Le format d'expression suivant n'est pas pris en charge.

    $.arrayObject[0:].element[0:].subElement
  • Seul un tableau peut être mis à plat dans un schéma. Plusieurs tableaux peuvent être référencés/retournés sur une ligne contenant tous les éléments du tableau. Cependant, seul un tableau peut avoir chacun de ses éléments retournés sur des lignes distinctes.

    Un schéma contenant des éléments au format suivant est valide. Ce format retourne le contenu du second tableau dans une seule colonne, répétée pour chaque élément du premier tableau.

    $.arrayObjectOne[0:].element $.arrayObjectTwo[0:]

    Un schéma contenant des éléments au format suivant n'est pas valide.

    $.arrayObjectOne[0:].element $.arrayObjectTwo[0:].element

Autres considérations

Voici quelques considérations supplémentaires concernant l'utilisation de JSONPath :

  • Si aucun élément de l'expression JSONPath n'accède aux tableaux dans le schéma d’application, une ligne est créée dans le flux d’entrée de l’application pour chaque enregistrement JSON traité.

  • Lorsqu'un tableau est mis à plat (c’est-à-dire que ses éléments sont retournés sous la forme de lignes individuelles), tous les éléments manquants retournent une valeur nulle créée dans le flux intégré à l'application.

  • Un tableau est toujours mis à plat sur une ligne minimum. Si aucune valeur n'est retournée (c'est-à-dire, si le tableau est vide ou si aucun de ses éléments n'est interrogé), une seule ligne comportant toutes les valeurs nulles est retournée.

    L'expression suivante retourne les enregistrements de l'exemple JSON précédent qui ont une valeur nulle, car il n'existe aucun élément correspondant à l'emplacement spécifié.

    $.orders[0:].itemId

    L'expression précédente retourne les éléments suivants de l'exemple JSON précédent.

    null

    null

    null

Rubriques connexes