1

I am trying to extract a piece of text from a list.
The list is something like this

[{'texts': [{'language': {'isoCode': 'it', 'name': 'Italian'},
    'text': 'CATETERI VENOSI CENTRALI CON ACCESSO PERIFERICO MULTILUME',
    'allLanguagesApplicable': None},
   {'language': {'isoCode': 'fr', 'name': 'French'},
    'text': 'CATHÉTERS VEINEUX CENTRAUX MULTILUMIÈRES PAR ABORD PÉRIPHÉRIQUE',
    'allLanguagesApplicable': None},
   {'language': {'isoCode': 'en', 'name': 'English'},
    'text': 'CENTRAL I.V. MULTI-LUMEN CATHETERS, PERIPHERAL ACCESS',
    'allLanguagesApplicable': None}]}]

I need to extract the text where language.isoCode is en.

But the JMESPath query is alluding me for some reason.

I want the output as

CENTRAL I.V. MULTI-LUMEN CATHETERS, PERIPHERAL ACCESS

This is my try

jmespath.search("[*].texts[?language.isoCode == 'en'].text[]", temp_json)
['CENTRAL I.V. MULTI-LUMEN CATHETERS, PERIPHERAL ACCESS']

But, I want the text only not an array.

β.εηοιτ.βε
  • 33,893
  • 13
  • 69
  • 83
jhon.smith
  • 1,963
  • 6
  • 30
  • 56

1 Answers1

0

You need to stop the filter projection created by [?language.isoCode == 'en'] in order to get the first element of that array.

This is exaplained in details in the chapter named pipe expressions of the tutorials.

So, you query ends up being

[*].texts[?language.isoCode == 'en'].text[] | [0]

Which gives the expected:

"CENTRAL I.V. MULTI-LUMEN CATHETERS, PERIPHERAL ACCESS"
β.εηοιτ.βε
  • 33,893
  • 13
  • 69
  • 83