我有一个 Dynamics 365 API,即 FetchXML 和 Liquid。
API 没有任何问题,一切正常。 API 从 Dataverse 中提取的大多数字段都是文本字段。因此,当工作人员执行诸如从 Word 文档复制\粘贴之类的(愚蠢)操作时(因为文本字段可能支持 1000 个字符的“描述”)。 我们已经有了液体处理换行符和引号,但我正在尝试让它处理列表项。
假设我将其复制到文本字段中(深色模式下 MS Word 的屏幕截图)
我将换行符转换为
<br>
,我将引号从 """
更改为 "\""
以转义它 - 这些都有效。然后尝试将 "&tab;"
更改为换行符 <br>
(因为我假设项目符号有选项卡)并将项目符号 "•"
更改为 "−"
...但我似乎缺少一些内容,因为 JSON 响应是还是坏了。
这是我的液体代码。目前我只是测试并尝试让“nxn_edmspeakerabout”字段发挥作用。
{ "Entity" :
[
{% for result in my_query.results.entities %}
{
"msevtmgt_name" : "{{ result['msevtmgt_name'] }}",
"ceda_speakerrole" : "{{ result['ceda_speakerrole'].value }}",
"ceda_speakerrole_label" : "{{ result.ceda_speakerrole.label }}",
"msevtmgt_eventid" : "{{ result['msevtmgt_event'].id }}",
"msevtmgt_event_label" : "{{ result['msevtmgt_event'].name }}",
"msevtmgt_speakerid" : "{{ result['msevtmgt_speaker'].id }}",
"msevtmgt_speaker_label" : "{{ result['msevtmgt_speaker'].name }}",
"nxn_edmspeakerabout" : "{{ result['nxn_edmspeakerabout'] | replace: "\n", "<br>" | replace: """, "\"" | replace: "&tab;", "<br>" | replace: "•", "−" | escape }}",
"nxn_edmspeakercompany" : "{{ result['nxn_edmspeakercompany'] }}",
"nxn_edmspeakerposition" : "{{ result['nxn_edmspeakerposition'] }}",
"msevtmgt_description" : "{{ result['msevtmgt_description'] | replace: "\n", "<br>" | replace: """, "\"" | escape }}",
"nxn_edmimageurl" : "{{ result['nxn_edmimageurl'] }}",
"ceda_order" : "{{ result['ceda_order'] }}"
}
{% unless forloop.last %},{% endunless %}
{% endfor %}
]
}
这是我的浏览器中的 API JSON 响应
{ "Entity" : [ { "msevtmgt_name" : "The Hon. Chris Bowen MP", "ceda_speakerrole" : "2", "ceda_speakerrole_label" : "Speaker", "msevtmgt_eventid" : "542b064e-7616-428c-8b9b-12e941be4d46", "msevtmgt_event_label" : "Livestream: Rewiring the Nation – The Hon. Chris Bowen", "msevtmgt_speakerid" : "a8d51ab4-cf1a-ee11-8f6c-000d3a7943d3", "msevtmgt_speaker_label" : "The Hon. Chris Bowen MP", "nxn_edmspeakerabout" : "This is “quote”<br>This is bullet points:<br>− Item 1<br>− Item 2<br>− Item 3", "nxn_edmspeakercompany" : "", "nxn_edmspeakerposition" : "", "msevtmgt_description" : "The is the "Speaker Description" quote test", "nxn_edmimageurl" : "https://assets-oce.mkt.dynamics.com/7b7fa636-f815-4880-b15d-77d70348ee1e/digitalassets/images/11491d16-da34-ee11-bdf4-6045bd3d3194?ts=638269789794222007", "ceda_order" : "" } ] }
如果我获取浏览器 JSON 的源代码并将其粘贴到 Notepad++ 中,我可以看到那里有一个字符(突出显示),但不知道它是什么,因为它不是制表符或空格。
更新: 因此,在十六进制编辑器中查看,显然该字符是(十六进制)09,作为 unicode 是
"	"
,但如果我将 replace: "	", " "
添加到我的液体中,该字符仍然存在。
您是否尝试过 JSON 过滤器来避免这种情况:
"Myvalue": {{ value | json }}
我自己解决了...
项目符号左侧的选项卡只能用
&tab;
解决
项目符号右侧的选项卡只能用 \t
来解决
&tab;
和 \t
的十六进制值为 09 ~ 因此是 "	"
的 unicode 版本,但显然它们彼此不相等(或相同的东西)......至少在这个 Microsoft 世界中.
所以液体过滤一切正常,代码如下所示:
{ "Entity" :
[
{% for result in my_query.results.entities %}
{
"msevtmgt_name" : "{{ result['msevtmgt_name'] }}",
"ceda_speakerrole" : "{{ result['ceda_speakerrole'].value }}",
"ceda_speakerrole_label" : "{{ result.ceda_speakerrole.label }}",
"msevtmgt_eventid" : "{{ result['msevtmgt_event'].id }}",
"msevtmgt_event_label" : "{{ result['msevtmgt_event'].name }}",
"msevtmgt_speakerid" : "{{ result['msevtmgt_speaker'].id }}",
"msevtmgt_speaker_label" : "{{ result['msevtmgt_speaker'].name }}",
"nxn_edmspeakerabout" : "{{ result['nxn_edmspeakerabout'] | replace: "\n", "<br>" | replace: """, "\"" | replace: "&tab;", "<br>" | replace: "•", "−" | replace: "\t", " " | escape }}",
"nxn_edmspeakercompany" : "{{ result['nxn_edmspeakercompany'] }}",
"nxn_edmspeakerposition" : "{{ result['nxn_edmspeakerposition'] }}",
"msevtmgt_description" : "{{ result['msevtmgt_description'] | replace: "\n", "<br>" | replace: """, "\"" | replace: "&tab;", "<br>" | replace: "•", "−" | replace: "\t", " " | escape }}",
"nxn_edmimageurl" : "{{ result['nxn_edmimageurl'] }}",
"ceda_order" : "{{ result['ceda_order'] }}"
}
{% unless forloop.last %},{% endunless %}
{% endfor %}
]
}