Hi Günter, have you considered using json:parse
instead? I find the W3C-defined format obtained from fn:json-to-xml unnatural and unpractical; whereas BaseX-defined json:parse produces a very elegant, intuitive and natural representation of the content - turning JSON documents into near-equivalents of XML documents. Consider this example: given the json shown at the end of this post, getting a simple report (list of flight destinations and times) using json:parse might looks like this: unparsed-text('flights.json') ! json:parse(.) // flight[departureAirport = 'CGN']/concat(arrivalAirport, ' ', departureTime)
In comparison, using fn:json-to-xml, my query looks like this: unparsed-text('flights.json') ! json-to-xml(.) // *:map[@key eq 'flight'][*:string[@key = 'departureAirport'] = 'CGN'] /concat(*:string[@key = 'arrivalAirport'], ' ', *:string[@key = 'departureTime'])
Kind regards,Hans-Jürgen
[ { "flight" : { "departureAirport" : "CGN", "arrivalAirport" : "JFK", "departureTime" : "2017-08-26T20:00:00" } }, { "flight" : { "departureAirport" : "CGN", "arrivalAirport" : "FRA", "departureTime" : "2017-08-26T21:00:00" } } ]
Günter Dunz-Wolff guenter.dunzwolff@gmail.com schrieb am 12:36 Samstag, 26.August 2017:
It works. I’ll go with the second solution. Martin, thanks a lot!
Am 26.08.2017 um 12:26 schrieb Martin Honnen martin.honnen@gmx.de:
On 26.08.2017 12:23, Günter Dunz-Wolff wrote:
I’m trying to get data out of json via xquery. This is my scenario:
- Fetching data with fetch:text() calling a REST-API
- Transforming the data with json-to-xml, so I’ll get something like
<array xmlns="http://www.w3.org/2005/xpath-functions%E2%80%9C%3E <map> <string key=„word1“>gehen</string> ... </map> ... </array> 3. In my xqm-file I have: let $json_xml := json-to-xml(my_fetched_json) 4. I try to get „gehen“ with $json_xml//string[@key='word1‘], but it yields nothing, also $json_xml//string yields nothing. Only $json_xml//text() yields all string-values into a long string. What am I doing wrong? Or is there another way, to work with JSON-Data to get values of a given key?
The elements are in the namespace http://www.w3.org/2005/xpath-functions so either use $json_xml//*:string[@key='word1'] or make sure you declare a prefix (e.g. 'fn') for the namespace and use that prefix in e.g. $json_xml//fn:string[@key='word1']