【发布时间】:2014-03-25 09:37:40
【问题描述】:
我正在尝试将 JSON 数组转换为对象。这是一种被黑的方式,但对我的目的来说已经足够了。
基本上我正在写一个方法来得到这个
var data = [{
"MonthYearShortName": "Sep-13",
"TotalCustomers": 1905.0,
"Aquisition": 317.0,
"Attrition": 9.0
}, {
"MonthYearShortName": "FY-14",
"TotalCustomers": 2158.0,
"Aquisition": 401.0,
"Attrition": 15.0909090909091
}]
变成这样的
data = [{
key: 'Attrition',
color: '#d62728',
values: [{
"label": "Sep-13",
"value": 9
}, {
"label": "FY-14",
"value": 15.0909090909091
}]
},
{
key: 'Total Customer',
color: '#1f77b4',
values: [{
"label": "Sep-13",
"value": 1905
}, {
"label": "FY-14",
"value": 2158
}]
},
{
key: 'Aquisition',
color: '#1f7774',
values: [{
"label": "Sep-13",
"value": 317
}, {
"label": "FY-14",
"value": 401
}]
}
];
颜色暂时是静态的。我稍后会处理它。
现在开始我的破解方式(我知道这很粗糙)
我尝试了这样的方法来消除损耗
var data = @"[{""MonthYearShortName"": ""Sep-13"",""TotalCustomers"": 1905.0,""Aquisition"": 317.0,""Attrition"": 9.0}, {""MonthYearShortName"": ""FY-14"",""TotalCustomers"": 2158.0,""Aquisition"": 401.0,""Attrition"": 15.0909090909091}]";
JArray a = JArray.Parse(data);
var label1 = a[0]["MonthYearShortName"].ToString();
var label2 = a[1]["MonthYearShortName"].ToString();
var totalCustomer1 = a[0]["TotalCustomers"].ToString();
var totalCustomer2 = a[1]["TotalCustomers"].ToString();
var aquisition1 = a[0]["Aquisition"].ToString();
var aquisition2 = a[1]["Aquisition"].ToString();
var attrition1 = a[0]["Attrition"].ToString();
var attrition2 = a[1]["Attrition"].ToString();
JObject rss1 =
new JObject(
new JProperty("channel",
new JObject(
new JProperty("Key", "Attrition"),
new JProperty("color", "#d62728"),
new JProperty("values",
new JArray(
from p in a
select new JObject(
new JProperty("label", a[0]["MonthYearShortName"].ToString()),
new JProperty("value", attrition1),
new JProperty("label", a[1]["MonthYearShortName"].ToString()),
new JProperty("value", attrition2)))))));
当我尝试这个时,我得到了一个
Can not add property label to Newtonsoft.Json.Linq.JObject. Property with the same name already exists on object.
现在,如果有人可以提出一种更清洁的方法(我现在想不出任何方法),我将非常感激,或者如果我的代码可以得到纠正,那将很有帮助。
谢谢
【问题讨论】: