如何在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
相关产品推荐
相关产品推荐

