You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Azure APIM中Liquid模板如何从嵌套JSON提取GROUP(tranid)等特定值

Azure APIM Liquid模板提取含特殊字符键值的解决方案

问题原因

Liquid解析器默认会将带括号的键名(如GROUP(tranid))识别为方法调用语句,而非普通字符串键名,因此直接使用点语法(values.GROUP(tranid))访问时会返回空值。

可行解决方案

方案1:方括号+字符串字面量直接访问(推荐)

对于包含特殊字符的键名,使用['键名']的语法替代点语法即可精准读取。

示例输入JSON结构

{
  "data": [
    {
      "values": {
        "GROUP(tranid)": "TXN2024001",
        "amount": "99.00",
        "createTime": "2024-05-20 12:00:00"
      }
    }
  ]
}

对应Liquid模板写法

{% for item in body.data %}
{
  "tranId": "{{ item.values['GROUP(tranid)'] }}",
  "payAmount": "{{ item.values['amount'] }}",
  "createTime": "{{ item.values['createTime'] }}"
}
{% endfor %}

方案2:遍历键值对匹配读取(兼容旧版APIM)

如果使用方括号语法仍返回空值(部分旧版本APIM的Liquid实现存在兼容问题),可以通过遍历values节点的所有键值对,匹配目标键名后取值。

示例模板

{% for item in body.data %}
  {% assign targetTranId = "" %}
  {% for keyValue in item.values %}
    {% if keyValue[0] == "GROUP(tranid)" %}
      {% assign targetTranId = keyValue[1] %}
      {% break %}
    {% endif %}
  {% endfor %}
{
  "tranId": "{{ targetTranId }}"
}
{% endfor %}

注意事项

  • 必须在APIM的set-body策略中显式指定template="liquid",否则模板不会被正确解析:
    <set-body template="liquid">
    <!-- 此处放置Liquid模板内容 -->
    </set-body>
    
  • 键名字符串的大小写必须与源JSON完全一致,Liquid的键名匹配为大小写敏感
  • 如果values节点为数组类型,需要先指定数组下标再访问键值,例如{{ item.values[0]['GROUP(tranid)'] }}

内容的提问来源于stack exchange,提问作者Thomas M

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 06:54:04