附加字符串时,for循环中出现Javascript[Object-Object]错误

Javascript [Object object] error in for loop while appending string

本文关键字:Javascript Object-Object 错误 字符串 循环 for      更新时间:2024-01-30

我是一个新手,试图将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);

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

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

为什么我不能在数组中填充实际内容?

您之所以得到这一点,是因为json_str[i]是一个对象,当您将对象强制转换为字符串时就会发生这种情况(除非该对象以有用的方式实现toString,而本例显然没有) 您还没有显示正在反序列化的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几乎没有任何理由,只需使用数组文字—[...]—即可。)