XPath / XPath-Funktionen / XPath: Sequenz-Funktionen / 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:Hierzu ein einfaches Beispiel, wo fn:parse-json eine map zurückgibt, die via map:get 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 json-to-xml, xml-to-json.
'[
{"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 array aus mehreren maps, 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 function ü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.
V.i.S.d.P.: Wilfried Grupe * Klus 6 * 37643 Negenborn
☎ 0151. 750 360 61 * eMail: info10@wilfried-grupe.de