我无法解码我认为是JSON的字符串数组。
var result = [
"{gene: 'PEX2', go_bp: '0.766500871709', CombinedPvalue: '9.999999995E-4'}",
"{gene: 'PEX5', go_bp: '0.766472586087', CombinedPvalue: '9.999999995E-4'}",
"{gene: 'PEX7', go_bp: '0.766386859737', CombinedPvalue: '9.999999995E-4'}"
];
您可以看到有3个与基因相关的JavaScript对象文字字符串,每个字符串都编码为一个字符串。我怎么解码这些?
我试过JSON.parse
,但它给了我一个错误。
for (var i = 0; i < result.length; i++)
console.log(JSON.parse(result[i]));
Uncaught SyntaxError: Unexpected token g
。
有简单的方法吗?
答案 0 :(得分:3)
你拥有的不是JSON,而是文本形式的Javascript对象。您可以使用eval()
将其转换为Javascript对象:
var result = [
"{gene: 'PEX2', go_bp: '0.766500871709', CombinedPvalue: '9.999999995E-4'}",
"{gene: 'PEX5', go_bp: '0.766472586087', CombinedPvalue: '9.999999995E-4'}",
"{gene: 'PEX7', go_bp: '0.766386859737', CombinedPvalue: '9.999999995E-4'}"
];
var f;
for (var i = 0; i < result.length; i++) {
eval("f = "+result[i]);
console.log(f.gene);
}
注意:eval
通常被认为是邪恶的。在这种情况下,如果您完全确定源数组只能保存数据而没有代码,那么它就足够安全了。
答案 1 :(得分:3)
由于这是有效的javascript,您可以使用Function()
通过创建匿名函数然后立即执行它来返回对象的新实例。与eval()
的其他答案不同,您不必声明变量并将对象文字分配给传递给eval的字符串中的该变量 - 您需要的所有内容都可以在一行中干净地完成。
var result = [
"{gene: 'PEX2', go_bp: '0.766500871709', CombinedPvalue: '9.999999995E-4'}",
"{gene: 'PEX5', go_bp: '0.766472586087', CombinedPvalue: '9.999999995E-4'}",
"{gene: 'PEX7', go_bp: '0.766386859737', CombinedPvalue: '9.999999995E-4'}"
];
for (var i = 0; i < result.length; i++) {
// create function that returns the obj literal
// and call it immedieately.
var obj = new Function( 'return ' + result[i] + ';' )();
document.write('gene: ' + obj.gene + ' <br />');
}
答案 2 :(得分:1)
JSON格式需要在属性名称周围加双引号。您的示例数据缺少这些引号,这不是有效的JSON。
它还需要双引号值,而不是单引号。
尝试这样的事情:
'{"gene": "PEX2", "go_bp": "0.766500871709", "CombinedPvalue": "9.999999995E-4"}',