如何在javascript中使用json值或在json对象中转换简单字符串?

时间:2013-02-15 09:23:56

标签: javascript ajax json jqplot

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的饼图,它采用上述格式的数据..现在我的问题是它可以正常使用静态数据。但是当我想要包含一些动态数据时。它显示空白图表,因为这个数据变量无法解析字符串am提供...
使用以下

生成上述代码段中指定的相同字符串
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 varibale时,它给出了以下模式,这与我最初给出的代码片段相同...

{ 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 个答案:

答案 0 :(得分: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);

答案 1 :(得分: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";

答案 2 :(得分:2)

尝试使用双引号包装属性名称,如JSON standard中所指定。例如:

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

我必须在这里使用反斜杠转义符来使用双引号,方法是使用单引号来包装要连接的字符串部分。只是不要忘记因此忽略任何单引号。

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

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

答案 3 :(得分:0)

感谢您的回复..但我的问题通过以下

解决了
var data = eval(txt);

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