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

中的 JSONresult如下所示:

[
    {
        "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);

我需要传递数据(数组类型)来绑定一个 highchart 柱状图。但是当我检查 var 系列时,它显示为

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

为什么我没有在数组中填充实际内容?

4

1 回答 1

0

你得到它是因为json_str[i]它是一个对象,当你将一个对象强制转换成一个字符串时就会发生这种情况(除非对象toString以一种有用的方式实现,而这显然没有)。您还没有显示要反序列化的 JSON...

现在您已经发布了 JSON,我们可以看到它是一个包含两个对象的数组,每个对象都有一个TextandSpend属性。因此,在您的循环中,json_str[i].Text将引用该Text属性。如果您想使用 中的名称检索该属性categoryField,您可以通过json_str[i][categoryField].

我不知道你想以 in 结束serie,但如果你希望它是一个双槽数组,其中第一个包含类别字段的值,第二个包含支出字段的值,那么

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

(几乎没有理由使用new Array,只需使用数组文字 - [...] - 代替。)

于 2012-07-23T05:27:11.320 回答