将javascript代码解析为响应

时间:2017-06-21 14:39:06

标签: javascript node.js

从某个服务器检索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服务的服务器端请求)

2 个答案:

答案 0 :(得分:2)

我假设你的返回值是一个包含完整表达式的字符串。

假设你有一个字符串:

'variable1 = ["something", ["a","b","c"], ["more stuff"]]'

并且您想要检索variable1[1]含义:["a","b","c"]

您可以将字符串拆分为=,然后使用JSON.parse()进行解析,然后查询所需的索引[1],如下所示:

&#13;
&#13;
var x = 'variable1 = ["something", ["a","b","c"], ["more stuff"]]';
var y = JSON.parse(x.split('=')[1])[1];

console.log(y);
&#13;
&#13;
&#13;

  

由于您已经接受了答案,我将留下以下解决方案   在其中,但会推荐以上。

您还可以创建一个新函数并返回表达式结果,类似于:

var x = 'variable1 = ["something", ["a","b","c"], ["more stuff"]]';

var y = new Function('return ' + x);

然后,您可以返回与variable1[1]

相似的内容
  

警告
  New Function()可能存在与eval()相同的风险,特别是如果从您无法控制的第三方服务中检索JSON字符串中的表达式,您最终可能会在不知情的情况下执行恶意代码!

&#13;
&#13;
var x = 'variable1 = ["something", ["a","b","c"], ["more stuff"]]';

console.log(new Function('return ' + x)()[1]);
&#13;
&#13;
&#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);

此方法完全避免了Functioneval及相关方法的安全问题。