我有一个json文件
命名:abcd.json
它的内容开始如下(这对我来说非常奇怪,因为这是我第一次遇到这样的json文件) - >
["51b59c2081ecf", [["parties", 0.0793, 0.238], ["signature", 0.002, 0.006]]]
["51b59c2683e7d", [["parties", 0.0037, 0.011]]]
["51b59c255e1fb", [["parties", 0.0037, 0.011]]]
["51b59c2e95da5", [["parties", 0.0037, 0.011]]]
我遇到了另一个json文件
命名:color.json
{
"colorsArray":[{
"colorName":"red",
"hexValue":"#f00"
},
{
"colorName":"green",
"hexValue":"#0f0"
},
{
"colorName":"blue",
"hexValue":"#00f"
},
{
"colorName":"black",
"hexValue":"#000"
}
]
}
我正在使用D3js,我想将abcd.json的内容推送到一个数组中,以便我可以进一步使用该数据。
MyQuestions:
2.如何将json数据推送到变量说Var数据。
目前我为某些临时测试提供了一些静态值的var数据,比如this->
var data= [
["51b59c2a019af", [["signature", 0.002, 0.006], ["parties", 0.0037, 0.011]]],
["51b59c2635997", [["fashion", 0.002, 0.006], ["parties", 0.0037, 0.011],["royal-challenge", 0.002, 0.6]]],
["51b59c29c39bf", [["parties", 0.0037, 0.1], ["signature", 0.002, 0.006]]]
];
答案 0 :(得分:0)
我认为前者不是一个合适的JSON,但是浏览器中的大多数库和JSON.parse仍然会解析它并返回一个数组。
见下面的jQuery代码:
parseJSON: function( data ) {
// Attempt to parse using the native JSON parser first
if ( window.JSON && window.JSON.parse ) {
return window.JSON.parse( data );
}
if ( data === null ) {
return data;
}
if ( typeof data === "string" ) {
// Make sure leading/trailing whitespace is removed (IE can't handle it)
data = jQuery.trim( data );
if ( data ) {
// Make sure the incoming data is actual JSON
// Logic borrowed from http://json.org/json2.js
if ( rvalidchars.test( data.replace( rvalidescape, "@" )
.replace( rvalidtokens, "]" )
.replace( rvalidbraces, "")) ) {
return ( new Function( "return " + data ) )();
}
}
}
jQuery.error( "Invalid JSON: " + data );
}
它使用new Function()
创建对象,类似于eval()
(但更好,因为它无法访问代码的范围),因此在这种情况下它仍将解析它。 / p>
答案 1 :(得分:0)
如果你有一个字符串中的文件内容,你可以通过将其包装在[]
内并添加相应的逗号轻松地将其转换为有效的JSON;
var str = '["51b59c2081ecf", [["parties", 0.0793, 0.238], ["signature", 0.002, 0.006]]]' + "\n" +
'["51b59c2683e7d", [["parties", 0.0037, 0.011]]]' + "\n" +
'["51b59c255e1fb", [["parties", 0.0037, 0.011]]]' + "\n" +
'["51b59c2e95da5", [["parties", 0.0037, 0.011]]]' + "\n";
var valid_json = '[' + str.split(/[\n\r]/).
filter(function(val) { return (val !== ''); }).
join(',') + ']';
console.log(valid_json);