我是一个尝试从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
为什么我没有在数组中填充实际内容?
答案 0 :(得分:0)
你得到的是因为json_str[i]
是一个对象,当你将一个对象强制转换为一个字符串时会发生什么(除非该对象以一种有用的方式实现toString
,这显然不是“T)。 您尚未显示要反序列化的JSON ...
现在您已经发布了JSON,我们可以看到它是一个包含两个对象的数组,每个对象都有Text
和Spend
属性。因此,在您的循环中,json_str[i].Text
将引用Text
属性。如果您想使用categoryField
中的名称检索该属性,可以通过json_str[i][categoryField]
执行此操作。
我不知道你想在serie
中得到什么,但如果你想要它是一个双插槽数组,其中第一个包含类别字段的值,第二个包含值花费领域,然后
var serie = [json_str[i][categoryField], json_str[i][valueField]];
(几乎没有理由使用new Array
,只使用数组文字 - [...]
- 而不是。)