附加字符串时for循环中的Javascript [Object object]错误

时间:2012-07-23 05:19:47

标签: javascript object

我是一个尝试从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);
       }

result中的JSON如下所示:

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

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

1 个答案:

答案 0 :(得分:0)

你得到的是因为json_str[i]是一个对象,当你将一个对象强制转换为一个字符串时会发生什么(除非该对象以一种有用的方式实现toString,这显然不是“T)。 您尚未显示要反序列化的JSON ...

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

我不知道你想在serie中得到什么,但如果你想要它是一个双插槽数组,其中第一个包含类别字段的值,第二个包含值花费领域,然后

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

(几乎没有理由使用new Array,只使用数组文字 - [...] - 而不是。)