C#.NET * C++ * JAVASCRIPT * PYTHON * XML
* XML-SCHEMA * XPATH * XSL * XSL-FO * SVG * XQUERY * XPROC



XPath / XPath-Funktionen / XPath: Sequenz-Funktionen / JSON / XPath: fn:parse-json

XPath: fn:parse-json

XPath: fn:parse-json

fn:parse-json parst einen JSON-String und gibt den Wert als Map oder Array zurück.

Auf dieser Seite:

fn:parse-json generiert eine map

Hierzu ein einfaches Beispiel, wo fn:parse-json eine zurückgibt, die via entsprechend ausgewertet werden kann:


'{
   "a": 1, 
   "b": [3,6,9], 
   "LN": "Rielos", 
   "FN": "Lotte", 
   "IsFemale":true
}'
=> parse-json() 
=> map:get('LN')

Das Resultat:


Rielos

Siehe auch .

fn:parse-json generiert ein array


'[
 {"id":"1","name":"Holzflos","vorname":"Hugo"},
 {"id":"2","name":"Türschlos","vorname":"Theo"}
]'
=> parse-json() 
=> array:for-each(
    function($w){map:get($w, 'name')}
  )

In diesem Fall generiert fn:parse-json ein aus mehreren , das zunächst so aussieht:


["Holzflos", "Türschlos"]

Wenn Sie die einzelnen Items des Arrays benötigen, können Sie mithilfe XPath 3.0 so vorgehen:


'[
 {"id":"1","name":"Holzflos","vorname":"Hugo"},
 {"id":"2","name":"Türschlos","vorname":"Theo"}
]'
=> parse-json() 
=> array:for-each(
    function($w){
      map:get($w, 'name') 
    }
  ) 
=> for-each(  
  function($w){
    (1 to array:size($w)) ! (.) ! array:get($w, (.))
  }
)

Alternativ können Sie die vorselektierte Arrayliste auch einer übergeben:


function($sequence){
  for-each(
    1 to $sequence=>array:size()
    , function($w){
      array:get($sequence, $w)
    }
  )
} 
('[
   {"id":"1","name":"Holzflos","vorname":"Hugo"},
   {"id":"2","name":"Türschlos","vorname":"Theo"}
  ]'
    => parse-json() 
    => array:for-each(
      function($w){map:get($w, 'name')}
  )
)

Alternative: Auswertung mithilfe XQuery:


let $input := '[
 {"id":"1","name":"Holzflos","vorname":"Hugo"},
 {"id":"2","name":"Türschlos","vorname":"Theo"}
]'
=> parse-json() 
=> array:for-each(
    function($w){map:get($w, 'name')}
  )
for $w in (1 to array:size($input)) 
let $pos := $w
return array:get($input, $pos)

... und erhalten daraufhin jeweils:


Holzflos
Türschlos

#title'Das Beispiel in XSLT


<xsl:variable name="vjson">{
         "a": 1, 
         "b": [3,6,9], 
         "LN": "Rielos", 
         "FN": "Lotte", 
         "IsFemale":true
      }
</xsl:variable>

Rufen Sie aus der Variablen vjson (stellvertretend für den XML-Input) das Feld LN auf,


<xsl:template match="/">
    <Nachname>
      <xsl:value-of 
           select="fn:parse-json($vjson)?LN"/>
    </Nachname>
</xsl:template>

... so ergibt die Auswertung mit fn:parse-json:


<Nachname>Rielos</Nachname>

wg / 4. April 2020



Fragen? Anmerkungen? Tipps?

Bitte nehmen Sie Kontakt zu mir auf.






Vielen Dank für Ihr Interesse an meiner Arbeit.



V.i.S.d.P.: Wilfried Grupe * Klus 6 * 37643 Negenborn

☎ 0151. 750 360 61 * eMail: info10@wilfried-grupe.de

www.wilfried-grupe.de/parsejson.html