0

私はonSuccess関数からの結果を次のように逆シリアル化しようとしている初心者です:

 "onResultHttpService": function (result, properties) {
  var json_str = Sys.Serialization.JavaScriptSerializer.deserialize(result);
  var data = [];
  var categoryField = properties.PodAttributes.categoryField;
  var valueField = properties.PodAttributes.valueField;
  for (var i in json_str) {                   
       var serie = new Array(json_str[i] + '.' + categoryField, json_str[i] +     '.' + valueField);
                data.push(serie);
       }

のJSONはresult次のようになります。

[
    {
        "Text": "INDIRECT GOODS AND SERVICES",
        "Spend": 577946097.51
    },
    {
        "Text": "LOGISTICS",
        "Spend": 242563225.05
    }
]

ご覧のとおり、forループに文字列を追加しています。これを行っている理由は、プロパティ名が変化し続けるため、次のように記述することはできません。

 var serie = new Array(json_str[i].propName, json_str[i].propValue);

ハイチャート列チャートをバインドするには、データ(配列型)を渡す必要があります。しかし、var serieをチェックすると、次のように表示されます。

serie[0] = [object Object].Text
serie[1] = [object Object].Spend

実際のコンテンツが配列内に入力されないのはなぜですか?

4

1 に答える 1

0

はオブジェクトであるため、これを取得します。これjson_str[i]は、オブジェクトを文字列に強制するときに発生します(オブジェクトtoStringが便利な方法で実装されている場合を除きますが、これは明らかに実装されていません)。デシリアライズするJSONを表示していません...

TextJSONを投稿したので、JSONが2つのオブジェクトを含む配列であり、それぞれにとSpendプロパティがあることがわかります。したがって、ループでjson_str[i].Textは、プロパティを参照しTextます。の名前を使用してそのプロパティを取得する場合は、を使用して取得categoryFieldできますjson_str[i][categoryField]

最終的に何になりたいのかわかりませんserieが、最初の配列にカテゴリフィールドの値が含まれ、2番目の配列に支出フィールドの値が含まれる2スロット配列にしたい場合は、

var serie = [json_str[i][categoryField], json_str[i][valueField]];

(使用する理由はほとんどありません 。代わりにnew Array配列リテラルを使用してください— —)。[...]

于 2012-07-23T05:27:11.320 に答える