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の円グラフが1つあり、上記の形式のデータを取得します。現在、私の問題は静的データで正常に機能することです。しかし、動的データを含めたい場合。このデータ変数が提供している文字列を解析できないため、空白のグラフが表示されます...
上記のコードスニペットで指定されているのと同じ文字列を次のように生成しています

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

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

私は知りませんでした..それはこれだけが必要でした...あなたの助けに感謝します..そしてこれでmが間違っているなら私を訂正してください

于 2013-02-15T10:16:31.513 に答える