2017-06-21 68 views
-3

获取一些服务器,我得到一个GET请求作为响应之后:解析JavaScript代码为响应

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

我需要提取variable1[1]阵列["a","b","c"]在我的js代码中使用。

(我用的的NodeJS的要求 - 这是一个服务器端的请求,这是我无法控制的外部Web服务)

+3

很酷。你有什么尝试?你卡在哪里?你熟悉'JSON.parse'和'String.prototype.split'吗? –

+0

什么?我不明白... – Ionut

+0

我认为这应该是JSON ...所以如果是这样,请阅读如何使用它。 – CBroe

回答

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);

正如你已经接受了答案,我将离开下面的解决方案 中,但会建议以上。

你也可以创建一个新的功能,并返回表达式的结果,与此类似:

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

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

然后,您可以返回你想要什么相似获得variable1[1]

警告
New Function()呈现可能与eval()相同的风险,特别是如果检索expressi如果您无法控制来自第三方服务的JSON字符串中的内容,您是否可能会在不知情的情况下执行恶意代码?

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

 
console.log(new Function('return ' + x)()[1]);

+0

你真棒!比你:) :) – Mike

+3

@Mike Word的警告虽然 - 如果'新功能()'提出了与'eval()'相同的问题,它可能是不安全的,因为你可能会不知情的情况下执行恶意代码。 – Nope

+0

@Fran这就是为什么分割'='和'JSON.parse'表达式会更好。 –

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,和相关方法的安全问题。