Xquery 如何将json数组强制转换为json对象
让$jsonobject:=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"
{
"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")))
)