Dynamics 365 API中Liquid处理Word复制列表项异常问题排查
问题解决:Dynamics 365 Liquid处理Word复制内容的JSON格式异常
核心问题分析
从Word复制到Dataverse文本字段的内容,包含原生制表符(十六进制0x09)、智能引号、特殊项目符号,之前的Liquid处理存在两个关键问题:
- 用
	匹配制表符无效——字段里存的是原生制表符字符,不是HTML实体	 - 手动转义引号+使用
escape过滤器错误——escape是HTML转义,不是JSON转义,会导致JSON结构被未转义的双引号破坏
解决方案
1. 正确处理制表符
在Liquid中直接用\t匹配原生制表符,替换成你需要的内容(比如 或<br>)
2. 用JSON专用过滤器替代手动转义
放弃手动替换",改用Liquid的json过滤器,它会自动处理所有JSON需要转义的字符(双引号、换行、制表符等),比手动替换更可靠
3. 完善项目符号处理
Word复制的项目符号可能有多种(比如•、◦、▪),可以多添加几个replace覆盖常见类型
修改后的Liquid代码片段
重点修改nxn_edmspeakerabout和msevtmgt_description字段的处理逻辑:
{ "Entity" : [ {% for result in my_query.results.entities %} { "msevtmgt_name" : "{{ result['msevtmgt_name'] | json }}", "ceda_speakerrole" : "{{ result['ceda_speakerrole'].value | json }}", "ceda_speakerrole_label" : "{{ result.ceda_speakerrole.label | json }}", "msevtmgt_eventid" : "{{ result['msevtmgt_event'].id | json }}", "msevtmgt_event_label" : "{{ result['msevtmgt_event'].name | json }}", "msevtmgt_speakerid" : "{{ result['msevtmgt_speaker'].id | json }}", "msevtmgt_speaker_label" : "{{ result['msevtmgt_speaker'].name | json }}", "nxn_edmspeakerabout" : "{{ result['nxn_edmspeakerabout'] | replace: "•", "−" | replace: "◦", "−" | replace: "▪", "−" | replace: "\n", "<br>" | replace: "\t", " " | json }}", "nxn_edmspeakercompany" : "{{ result['nxn_edmspeakercompany'] | json }}", "nxn_edmspeakerposition" : "{{ result['nxn_edmspeakerposition'] | json }}", "msevtmgt_description" : "{{ result['msevtmgt_description'] | replace: "\n", "<br>" | json }}", "nxn_edmimageurl" : "{{ result['nxn_edmimageurl'] | json }}", "ceda_order" : "{{ result['ceda_order'] | json }}" } {% unless forloop.last %},{% endunless %} {% endfor %} ] }
关键修改说明
- 所有字段统一用
json过滤器收尾,确保JSON格式完全合规 - 用
\t替换原生制表符,解决之前匹配不到的问题 - 新增多种项目符号的替换,覆盖Word常见的列表符号
- 去掉手动的
"替换,交给json过滤器自动处理
内容的提问来源于stack exchange,提问作者BlissSol
相关产品推荐
相关产品推荐

