MarkLogic XQuery中XML转JSON如何避免生成额外反斜杠?
MarkLogic XML转JSON去除额外反斜杠的解决方法
问题本质
MarkLogic默认JSON转换会遵循JSON语法规范:\是JSON的转义字符,所以转换时会自动把单个\转成\\。如果业务场景需要输出单个\(即使这会生成非标准JSON),可以用以下两种方法实现:
方法一:手动拼接JSON字符串
直接提取XML文本节点的值,仅转义JSON必需的双引号,跳过反斜杠的转义:
let $xml := <text>$$\parent* \$$</text> let $text-content := $xml/text() // 仅转义双引号,避免反斜杠被二次转义 let $escaped-text := replace($text-content, '"', '\\"') return '{"text": "' || $escaped-text || '"}'
执行后会生成你期望的{"text": "$$\parent* \$$"}。
方法二:自定义JSON转换配置
通过修改json:transform-to-json的配置,覆盖字符串处理逻辑,把默认转义后的\\替换回\:
import module namespace json = "http://marklogic.com/xdmp/json" at "/MarkLogic/json/json.xqy"; let $xml := <text>$$\parent* \$$</text> let $custom-config := json:config("custom") // 自定义字符串转换函数,还原反斜杠 let $_ := map:put($custom-config, "string-transform", function($str) { xdmp:quote($str, "marklogic-json") => replace("\\\\", "\") }) return json:transform-to-json($xml, $custom-config)
注意事项
这种输出的内容不符合JSON官方规范,因为JSON要求所有反斜杠必须转义。如果下游系统是标准JSON解析器,会出现解析错误,仅建议在明确业务场景允许非标准JSON时使用。
内容的提问来源于stack exchange,提问作者Madoantony
相关产品推荐
相关产品推荐

