从某个服务器检索GET请求后,我得到了响应:
<px:PXGridColumn MatrixMode="True" LinkCommand="ViewDetails" DataField="Value" Width="300px" AllowShowHide="False" AllowSort="False" >
我需要提取要在我的js代码中使用的variable1 = ["something", ["a","b","c"], ["more stuff"]]
数组variable1[1]
。
(我正在使用NodeJS作为请求 - 它是对我无法控制的外部Web服务的服务器端请求)
答案 0 :(得分:2)
我假设你的返回值是一个包含完整表达式的字符串。
假设你有一个字符串:
'variable1 = ["something", ["a","b","c"], ["more stuff"]]'
并且您想要检索variable1[1]
含义:["a","b","c"]
您可以将字符串拆分为=
,然后使用JSON.parse()
进行解析,然后查询所需的索引[1]
,如下所示:
var x = 'variable1 = ["something", ["a","b","c"], ["more stuff"]]';
var y = JSON.parse(x.split('=')[1])[1];
console.log(y);
&#13;
由于您已经接受了答案,我将留下以下解决方案 在其中,但会推荐以上。
您还可以创建一个新函数并返回表达式结果,类似于:
var x = 'variable1 = ["something", ["a","b","c"], ["more stuff"]]';
var y = new Function('return ' + x);
然后,您可以返回与variable1[1]
警告强>
New Function()
可能存在与eval()
相同的风险,特别是如果从您无法控制的第三方服务中检索JSON字符串中的表达式,您最终可能会在不知情的情况下执行恶意代码!
var x = 'variable1 = ["something", ["a","b","c"], ["more stuff"]]';
console.log(new Function('return ' + x)()[1]);
&#13;
答案 1 :(得分:0)
如果您想要一种更安全的方式来获取该表达式的值,请考虑将结果拆分为第一个=
,然后对表达式执行JSON.parse
。
const input = 'variable1 = ["something", ["a","b","c"], ["more stuff"]]';
const expression = input
// Split the string on the equals sign
.split('=')
// Gather the pieces after the first one (just in case there's a "=" in the array)
.slice(1)
// Put it back together into a single string
.join('');
// Convert the string to an actual array
const output = JSON.parse(expression);
console.log(output);
此方法完全避免了Function
,eval
及相关方法的安全问题。