I had similar desires for a nicer syntax for working with JSON a few months ago and this is what I came up with. Its similar to what Micheal was describing. https://github.com/williammsawyer/xquerycoder/blob/master/libs/json-functions.xqy
-Will On Mon, Mar 16, 2015 at 2:03 PM, Will Thompson <[email protected]> wrote: > In this case, json:object and json:array are fine - I just wanted nicer > syntax so that, say, a recursive typeswitch to transform XML to JSON > wouldn't turn into a mess with all the temp objects. I guess it's also > probably nice for building arbitrary JSON if there is any nesting involved. > > Mike - Right. And best-case scenario, if there is a conflict, I just > remove the utility functions and everything works :) > > -W > > > > On Mar 12, 2015, at 9:36 PM, David Lee <[email protected]> wrote: > > > > Making an XQuery function to call the explicit constructor with variable > key names or number of keys is not possible directly > > There isn't the equivalent of map:entry , field names are constant > expressions and the number of fields is constant, unlike element {}{} > > > > You would have to resort to string conversions, in memory node > operations or evals ... Or stick with json:object() /json:array() > > Or write it in Javascript > > > > In all cases what would the signature be? A fundamental mismatch > between XQuery an JSON is sequences vs arrays there are no vararg functions > and any construct to nest or bound sequences involves a lot of syntax and > temporary objects. > > > > If you come up with something let us know! > > > > > > > > > > > > Sent from my iPad (excuse the terseness) > > David A Lee > > [email protected] > > > > > >> On Mar 12, 2015, at 9:51 PM, Michael Blakeley <[email protected]> > wrote: > >> > >> I tend to avoid declaring functions or variables in any namespace that > I know other code is using. But you're doing it with your eyes open, and > that's probably ok. Someday a server update may conflict. But if that > happens, I'm sure you'll catch it in testing, and fix it before it breaks > production. > >> > >> Right? > >> > >> -- Mike > >> > >>> On 12 Mar 2015, at 17:35 , Will Thompson <[email protected]> > wrote: > >>> > >>> Thanks all. The ML8 constructors look very nice. > >>> > >>> Mike - That's what I was looking for, thanks. I ended up writing > something similar using json:array before I saw the reply, but I like your > implementation better. Also, I appropriated the json: prefix because it > looked nicer...for example, is there any reason why this would be bad > (other than ML might decide implement it at some later date)? > >>> > >>> declare function json:new(...) > >>> > >>> -W > >>> > >>>> On Mar 12, 2015, at 4:38 PM, Sudhakar Reddy < > [email protected]> wrote: > >>>> > >>>> You can also build using JSON node constructors available in ML 8 > >>>> let $json-node := object-node { "id": number-node {12345}, > >>>> "a" : array-node {1,2,3} , > >>>> "b" : fn:true(), > >>>> "c" : number-node {1234}, > >>>> "d" : array-node{ > >>>> number-node {12345}, > >>>> text {"test"}, > >>>> boolean-node {fn:true()}, > >>>> array-node {'aaa','bbb','ccc'}}, > >>>> "e" : object-node { "x": "hello world", > >>>> "y": fn:false(), > >>>> "z" : array-node {1, 'a', fn:true()} > >>>> }, > >>>> "g": null-node {} > >>>> } > >>>> return $json-node > >>>> > >>>> Thanks > >>>> Sudhakar > >>>> > >>>> > >>>> > >>>>> On 3/11/15, 6:52 PM, "Erik Hennum" <[email protected]> > wrote: > >>>>> > >>>>> Hi, Will: > >>>>> > >>>>> You can use json:object() instead of map:map() for a mutable object > where > >>>>> order is important. > >>>>> > >>>>> I think the API is the same as that of map:map otherwise. > >>>>> > >>>>> JSON nodes, like XML nodes, are immutable. > >>>>> > >>>>> Erik Hennum > >>>>> > >>>>> ________________________________________ > >>>>> From: [email protected] > >>>>> [[email protected]] on behalf of Will Thompson > >>>>> [[email protected]] > >>>>> Sent: Tuesday, March 10, 2015 5:09 PM > >>>>> To: MarkLogic Developer Discussion > >>>>> Subject: [MarkLogic Dev General] Constructing JSON objects > >>>>> > >>>>> Is there a nice way to construct a JSON object similar to how maps > can be > >>>>> constructed? Typically I would just do it this way: > >>>>> > >>>>> xdmp:to-json( > >>>>> map:new(( > >>>>> map:entry('x', 1), > >>>>> map:entry('y', 2) > >>>>> ))) > >>>>> > >>>>> Except that order is important in this specific scenario, and this > ruins > >>>>> ordering. > >>>>> > >>>>> -Will > >>>>> _______________________________________________ > >>>>> General mailing list > >>>>> [email protected] > >>>>> http://developer.marklogic.com/mailman/listinfo/general > >>>>> _______________________________________________ > >>>>> General mailing list > >>>>> [email protected] > >>>>> http://developer.marklogic.com/mailman/listinfo/general > >>>> > >>>> _______________________________________________ > >>>> General mailing list > >>>> [email protected] > >>>> http://developer.marklogic.com/mailman/listinfo/general > >>> > >>> _______________________________________________ > >>> General mailing list > >>> [email protected] > >>> http://developer.marklogic.com/mailman/listinfo/general > >> > >> _______________________________________________ > >> General mailing list > >> [email protected] > >> http://developer.marklogic.com/mailman/listinfo/general > > _______________________________________________ > > General mailing list > > [email protected] > > http://developer.marklogic.com/mailman/listinfo/general > > _______________________________________________ > General mailing list > [email protected] > http://developer.marklogic.com/mailman/listinfo/general >
_______________________________________________ General mailing list [email protected] http://developer.marklogic.com/mailman/listinfo/general
