Xquery 如何将json数组强制转换为json对象

Xquery 如何将json数组强制转换为json对象,xquery,marklogic,Xquery,Marklogic,让$jsonobject:= { "a": "val1 as value1", "b": "val2 as value2, val3 as value3" } 让$jsonarray:= { "a": "val1", "b": [ "a1", "a"

让$jsonobject:=

{
    "a": "val1 as value1",
    "b": "val2 as value2, val3 as value3"
}
让$jsonarray:=

{
    "a": "val1",
    "b": [
        "a1",
        "a"
    ]
}

以上两种情况有什么不同?如何使用xquery将json数组转换为json对象?

通常,最简单的方法是创建可变的映射和数组数据结构,然后转换为不可变的json对象-node()或数组-node(),如下所示:

在大多数情况下,只有在插入数据库时才需要不可变的JSON节点。如果可变映射和数组结构足够,只需省略对xdmp:to-json()的调用


希望这能有所帮助,

在我对JSON的理解中,两个代码片段似乎都显示了一个对象,第一个对象有两个名为
a
b
的属性,它们都有字符串值,而第二个对象有名为
a
的属性,它们的值都是字符串数组。因此,我不太明白为什么一个变量是命名对象,另一个是命名数组,或者这些示例如何作为将JSON数组转换为对象的问题示例。因为当我在一个xquery代码中使用这两个变量,并尝试对这两个变量执行map:get()时,会出现如下错误:=[1.0-ml]XDMP-ARGTYPE:(err:XPTY0004)map:get(json:object(),json:array())--arg2不是xs:string类型两者都不同第一个是json对象第二个是json数组根据错误您可以随时编辑您的问题,并在那里包含和格式化任何代码片段,以及添加准确的错误描述。然后我猜您必须等到有Marklogic技能的人给您答案。json:object是一个专门化map:map的定义。问题可能在于如何使用map:get。我建议在QC中运行的代码中与对象共享map:get代码,以便我们可以自己测试您的问题。
let $jsonobject := xdmp:to-json(
    map:entry("a", "val1 as value1")
    =>map:with("b", "val2 as value2, val3 as value3")
    )
let $jsonarray := xdmp:to-json(
    map:entry("a", "val1")
    =>map:with("b", json:to-array(("a1", "a")))
    )