3 votes

EvaluateJsonPath ne peut pas retourner un scalaire

J'essaie d'extraire une valeur de JSON vers un fichier attribut du fichier de flux . Lorsque j'exécute le processeur EvaluateJsonPath, j'obtiens l'erreur suivante

"Unable to get a scalar value for expression $..fields.storyBoard.stringValue .

L'entrée JSON ressemble à ceci :

{
  "name" : "projects/fakedims-0000/databases/(default)/documents/device/0000",
  "fields" : {
    "reportKey" : {
      "stringValue" : "abc123"
    },
    "dateOccured" : {
      "timestampValue" : "2018-10-14T04:00:00Z"
    },
    "storyBoard" : {
      "stringValue" : "https://path/to/media"
    },
    "new" : {
      "integerValue" : "25"
    },
    "name" : {
      "stringValue" : "device one"
    },
    "location" : {
      "geoPointValue" : {
        "latitude" : -78.413751,
        "longitude" : 38.156487
      }
    }
  },
  "createTime" : "2018-10-19T00:02:26.209335Z",
  "updateTime" : "2018-10-19T22:22:24.382136Z"
}

L'expression JSONPath est $..fields.storyBoard.stringValue

Je pense que ce qui se passe, c'est que le processeur renvoie ["https://path/to/media"] plutôt que la chaîne de caractères.

C'est ce que j'obtiens si j'évalue le contenu du fichier plutôt qu'un attribut. Pourquoi ? Que puis-je faire pour résoudre ce problème ?

11voto

Shu Points 8097

Modifier le Propriété du type de retour à la valeur json en EvaluateJsonPath si vous extrayez en tant que flowfile-attribute

Description de la propriété du type de retour :

Indique le type de retour souhaité pour les expressions JSON Path. En sélectionnant ' auto-détection ' définira le type de retour à ' json ' Destination de ' contenu du fichier de flux et scalaire ' ' attribut du fichier de flux '.

enter image description here Comme vous essayez d'extraire une clé imbriquée et non la clé au niveau de la racine (ex:name,createTime ), c'est la raison pour laquelle nous devons configurer le type de retour comme suit Json pas comme scalaire .

En outre, vous pouvez utiliser FlattenJson processeur(séparateur '_') pour aplatir tout le json imbriqué, utilisez alors Return Type as auto detect en EvaluateJsonPath processeur.

EvaluateJsonConfigs : enter image description here

Salida: Nous allons avoir une valeur d'attribut sans l'enfermer dans un tableau enter image description here

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