在TDE模板中无修改转换对象数组为字符串的可行性(无需FLWOR)
问题
工作文档里存在一个对象数组,想要无修改地将其转换为带引号转义的字符串形式,有两个疑问:
- 用MarkLogic的TDE(模板驱动提取)实现该转换是否可行且合理?
- 能否不使用FLWOR语句完成这一转换?
输入示例:
{ "Addr": [ { "AddrTypeCd": "MailingAddress", "Addr1": "911 FORBES AVE", "Addr2": "SUITE XXX", "CityName": "asdfasfd", "StateProvCd": "PA", "PostalCode": "15219" }, { "AddrTypeCd": "OfficeAddress", "Addr1": "911 Watson AVE", "Addr2": "SUITE XXX", "CityName": "asdfasfd", "StateProvCd": "CT", "PostalCode": "15119" } ] }
期望输出:
"{ \"Addr\": [ { \"AddrTypeCd\": \"MailingAddress\", \"Addr1\": \"911 FORBES AVE\", \"Addr2\": \"SUITE XXX\", \"CityName\": \"asdfasfd\", \"StateProvCd\": \"PA\", \"PostalCode\": \"15219\" }, { \"AddrTypeCd\": \"OfficeAddress\", \"Addr1\": \"911 Watson AVE\", \"Addr2\": \"SUITE XXX\", \"CityName\": \"asdfasfd\", \"StateProvCd\": \"CT\", \"PostalCode\": \"15119\" } ] }"
解答
一、TDE实现的可行性与合理性
TDE的核心定位是把半结构化的JSON/XML数据映射为结构化的关系型视图,方便用SQL或SPARQL做查询访问,本质是数据提取与结构化映射工具。而你需要的是把整个JSON对象序列化为带转义的字符串,属于序列化需求,完全不在TDE的设计场景内。
硬要通过TDE实现的话,你得手动给每个字段定义模板,处理所有引号转义、换行、缩进等格式细节,不仅代码量极大,后续JSON结构只要有变动,就得同步修改模板,维护成本高到离谱,完全不合理,绝对不推荐这么做。
二、无需FLWOR的实现方法
MarkLogic内置的xdmp:quote()函数专门用来将XML/JSON节点序列化为字符串,会自动处理引号转义、保留原有的格式(缩进、换行),完全满足你的需求,而且根本不需要写FLWOR语句。
示例代码(假设你的JSON节点存储在变量$input中):
xdmp:quote($input)
执行这个函数后,就能直接得到你期望的带转义引号的字符串结果,全程不需要遍历节点或手动处理格式。
内容的提问来源于stack exchange,提问作者Michal Sobanski
相关产品推荐
相关产品推荐

