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

如何在JSON查询中实现变量替换(规避eval风险)

安全获取动态键名对应的JSON值(替代eval)

在JavaScript中,访问对象属性时,当属性名存储在变量中,方括号表示法是eval()的安全替代方案,这是语言内置的标准特性,完全没有代码注入风险。

针对你的示例的解决方案

假设你已经将JSON解析为对象data,当顶级键名存在变量artist中时,直接用方括号替代点语法即可:

// 解析后的JSON对象
const data = {"deecracks": [{"layercodename": "osm","layername": "Open Street Map"},{"layercodename": "olen","layername": "tracks"}],"theboomtownrats": [{"layercodename": "kuku","layername": "Open Street Map"},{"layercodename": "olen","pathto": "rerere.json"}]};

// 存储动态键名的变量
const artist = "theboomtownrats";

// 用方括号访问动态键名,后续层级可以混合点语法或继续用方括号
const megatest = data[artist][0].layercodename;
console.log(megatest); // 输出 "kuku"

扩展场景:多层动态属性

如果后续的属性名也存储在变量中,同样可以用方括号逐层访问:

const artist = "theboomtownrats";
const itemIndex = 0;
const propName = "layercodename";

const value = data[artist][itemIndex][propName];
console.log(value); // 输出 "kuku"

为什么这比eval安全?

方括号表示法只是直接将变量值作为属性名去查找对象属性,不会执行任何字符串形式的代码,从根源上避免了eval()可能带来的恶意代码注入风险,同时性能也比eval()更优。

内容的提问来源于stack exchange,提问作者issik kul

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 13:47:41