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

如何在Nunjucks中解析字符串格式payload提取指定字段值

解决方案

你的payload是key=value格式的纯字符串,无法直接作为JSON对象读取,可通过以下两种方式提取字段:


方案1:直接在模板内解析(无需修改后端配置)

直接用Nunjucks内置的字符串处理方法解析,完整模板代码如下:

{% set u = user %}
{% set payload_str = u['custom'][0]['payload'] %}
{# 清理字符串:移除大括号和首尾空格 #}
{% set cleaned_str = payload_str | replace('{', '') | replace('}', '') | trim %}
{# 按逗号分割为单个键值对 #}
{% set kv_pairs = cleaned_str.split(',') %}
{# 初始化空对象存储解析结果 #}
{% set payload = {} %}

{# 遍历键值对存入对象 #}
{% for kv in kv_pairs %}
  {% set key_val = kv.trim().split('=') %}
  {% set _ = payload.__setitem__(key_val[0].trim(), key_val[1].trim()) %}
{% endfor %}

{# 直接调用字段即可 #}
Hello {{ payload.f_name }}
姓氏:{{ payload.l_name }}
来源:{{ payload.source }}
联系方式:{{ payload.contact }}

注:__setitem__是Nunjucks模板中给对象动态赋值的内置方法,用于解决模板语法不支持直接payload[key] = value赋值的问题。


方案2:注册自定义过滤器(适合高频使用场景)

如果项目中经常需要解析这类格式的字符串,可先在Nunjucks的初始化代码中注册自定义过滤器,后续模板调用更简洁。

后端注册过滤器代码(以Node.js环境为例):

const nunjucks = require('nunjucks');

// 初始化Nunjucks配置
nunjucks.configure('views', { autoescape: true });

// 注册解析payload的自定义过滤器
nunjucks.addFilter('parsePayload', function(str) {
  const cleaned = str.replace(/[{}]/g, '').trim();
  const payload = {};
  cleaned.split(',').forEach(kv => {
    const [key, value] = kv.trim().split('=');
    payload[key.trim()] = value.trim();
  });
  return payload;
});

模板调用代码:

{% set u = user %}
{% set payload = u['custom'][0]['payload'] | parsePayload %}

Hello {{ payload.f_name }}

以上两种方案对应当前给出的payload格式均可用,如果你的实际业务中payload的value包含逗号、等号特殊字符,可调整分割逻辑适配即可。

内容的提问来源于stack exchange,提问作者Rhea Agarwal

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.09 18:06:00