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

