0
var data = [
  {label: "a Organinzation",data: 1},
  {label: "b pvt Ltd.",data: 2},
  {label: "d Organization",data: 10},
  {label: "Completed Organization",data: 15},
  {label: "Running Organization",data: 34}
];

我的 jsp 页面中有一个 jqplot 饼图,它采用上述格式获取数据。现在我的问题是它与静态数据一起工作得很好。但是当我想包含一些动态数据时。它显示空白图表,因为此数据变量无法解析我提供的字符串...
正在生成与上面代码片段中指定的相同的字符串,并具有以下内容

var total = rawdata.split(";");
var txt = null;

for (var i = 1; i < total.length - 1; i++) {
    if (i == 1) {
        txt = "{ label: \"" + total[i] + "\", data: " + total[i + 1] + "}";
    } else {
        txt = txt + ",  { label: \"" + total[i] + "\", data: " + total[i + 1] + "}";
    }
    i++;
}
alert(txt);

elem = $('#fl_3');

var data = [JSON.parse(txt)];

当我提醒 txt 变量时,它给了我以下模式,这与我最初给出的代码片段相同......

{ label: "Abc LTd.", data: 42},
{ label: "A org", data: 2},  
{ label: "B Org", data: 6},  
{ label: "c Org", data: 1},  
{ label: "dbc comp ltd", data: 1},  
{ label: "avc comp pvt. ltd", data: 1}

那为什么它不能将其解析为json?在我的浏览器中,我收到了这个错误:

Error: SyntaxError: JSON.parse: expected property name or '}'

如果我写data=[txt];,什么都不会出现。
如果我写data = [JSON.parse(txt)];然后我得到错误..

有人可以帮我吗?我怎样才能让这个运行?

4

4 回答 4

3

将字符串包裹txt在括号内

var data = JSON.parse('[' + txt + ']');

这将为您提供对象数组。

正如@guypursey 提到的,您还必须将标签用双引号括起来,请参阅JSFiddle

var txt = '{ "label": "Abc LTd.", "data": 42},\
{ "label": "A org", "data": 2},\
{ "label": "B Org", "data": 6},\
{ "label": "c Org", "data": 1},\
{ "label": "dbc comp ltd", "data": 1},\
{ "label": "avc comp pvt. ltd", "data": 1}';

var data = JSON.parse('[' + txt + ']');
console.log(data);
于 2013-02-15T09:29:43.510 回答
3

如果您已经在数组中有数据,为什么还要构建一个字符串然后将其解析回对象?也许你只需要以total某种方式重新格式化。不确定total数组的结构。玩这个:

var data = [];
for (var i = 0; i < total.length - 1; i = i + 2) {
    data.push({label: total[i], data: total[i + 1]});
}

注意:我假设这里rawdata看起来像这个字符串:

"a Organinzation;1;b pvt Ltd.;2;Completed Organization;3";
于 2013-02-15T09:32:52.593 回答
2

尝试将属性名称用双引号括起来,如JSON 标准中指定的那样。例如:

txt= '{ "label": "' + total[i] + '", "data": ' + total[i+1] + '}';

通过使用单引号来包装您要连接的字符串部分,我不得不在这里为双引号使用反斜杠转义。只是不要忘记转义任何单引号。

并且不要忘记在您的数据数组的方括号周围加上单引号并将它们包含在解析中!

var data = JSON.parse('[' + txt +']');
于 2013-02-15T09:32:42.510 回答
0

感谢您的回复..但我的问题通过以下方式解决

var data = eval(txt);

我不知道..它只需要这个...感谢您的帮助..如果我错了请纠正我

于 2013-02-15T10:16:31.513 回答