使用 Liquid 重新格式化列表项

问题描述 投票:0回答:2

我有一个 Dynamics 365 API,即 FetchXML 和 Liquid。

API 没有任何问题,一切正常。 API 从 Dataverse 中提取的大多数字段都是文本字段。因此,当工作人员执行诸如从 Word 文档复制\粘贴之类的(愚蠢)操作时(因为文本字段可能支持 1000 个字符的“描述”)。 我们已经有了液体处理换行符和引号,但我正在尝试让它处理列表项。

假设我将其复制到文本字段中(深色模式下 MS Word 的屏幕截图)

我将换行符转换为

<br>
,我将引号从
"&quot;"
更改为
"\&quot;"
以转义它 - 这些都有效。然后尝试将
"&tab;"
更改为换行符
<br>
(因为我假设项目符号有选项卡)并将项目符号
"•"
更改为
"&minus;"
...但我似乎缺少一些内容,因为 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: "&quot;", "\&quot;" | replace: "&tab;", "<br>" | replace: "•", "&minus;" | escape }}",
        "nxn_edmspeakercompany" : "{{ result['nxn_edmspeakercompany'] }}",
        "nxn_edmspeakerposition" : "{{ result['nxn_edmspeakerposition'] }}",
        "msevtmgt_description" : "{{ result['msevtmgt_description'] | replace: "\n", "<br>" | replace: "&quot;", "\&quot;" | 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>&minus; Item 1<br>&minus; Item 2<br>&minus; 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 是

"&#9;"
,但如果我将
replace: "&#9;", "&nbsp;"
添加到我的液体中,该字符仍然存在。

liquid fetchxml
2个回答
0
投票

您是否尝试过 JSON 过滤器来避免这种情况:

"Myvalue": {{ value | json }}

0
投票

我自己解决了...

项目符号左侧的选项卡只能用

&tab;
解决 项目符号右侧的选项卡只能用
\t

来解决

&tab;
\t
的十六进制值为 09 ~ 因此是
"&#x9;"
的 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: "&quot;", "\&quot;" | replace: "&tab;", "<br>" | replace: "•", "&minus;" | replace: "\t", "&nbsp;" | escape }}",
        "nxn_edmspeakercompany" : "{{ result['nxn_edmspeakercompany'] }}",
        "nxn_edmspeakerposition" : "{{ result['nxn_edmspeakerposition'] }}",
        "msevtmgt_description" : "{{ result['msevtmgt_description'] | replace: "\n", "<br>" | replace: "&quot;", "\&quot;" | replace: "&tab;", "<br>" | replace: "•", "&minus;" | replace: "\t", "&nbsp;" | escape  }}",
        "nxn_edmimageurl" : "{{ result['nxn_edmimageurl'] }}",
        "ceda_order" : "{{ result['ceda_order'] }}"
      }

      {% unless forloop.last %},{% endunless %}

    {% endfor %}
  ] 
}
© www.soinside.com 2019 - 2024. All rights reserved.