Я хочу привязать данные из базы данных к линейной диаграмме, но у меня возникли трудности с созданием формата JSON. Пожалуйста, помогите мне изменить JSON следующим образом:
{
"LineListChart": [
{
"name": "Pembunuhan",
"data": 0
},
{
"name": "Pembunuhan",
"data": 0
},
{
"name": "Pembunuhan",
"data": 14
},
{
"name": "Pembunuhan",
"data": 4
},
{
"name": "Pembunuhan",
"data": 10
}
]
}
быть таким:
{
"LineListChart": [
{
"name": "Pembunuhan",
"data": [0,0,14,4,10]
}
]
}



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


вы могли бы использовать reduce
посмотрите ниже
var data = {
"LineListChart": [
{
"name": "Pembunuhan",
"data": 0
},
{
"name": "Pembunuhan",
"data": 0
},
{
"name": "Pembunuhan",
"data": 14
},
{
"name": "Pembunuhan",
"data": 4
},
{
"name": "Pembunuhan",
"data": 10
}
]
}
var chartData= data.LineListChart.reduce((result, item)=> {
if (!result.LineListChart){
result.LineListChart =[{name: item.name, data: [item.data]}];
}else result.LineListChart[0].data.push(item.data);
return result;
}, {})
console.info(chartData)Используя API-интерфейс LINQ-to-JSON Json.Net, вы можете преобразовать свой JSON следующим образом:
var obj = JObject.Parse(json);
obj["LineListChart"] = new JArray(
obj["LineListChart"]
.Children<JObject>()
.GroupBy(jo => (string)jo["name"], jo => jo["data"])
.Select(g => new JObject(
new JProperty("name", g.Key),
new JProperty("data", new JArray(g))
))
);
json = obj.ToString();
Рабочий пример: https://dotnetfiddle.net/qpuQy7
Поскольку вопрос json.net, я даю ответ на С# с помощью json.net
string test = @"{
'LineListChart': [
{
'name': 'Pembunuhan',
'data': 0
},
{
'name': 'Pembunuhan',
'data': 0
},
{
'name': 'Pembunuhan',
'data': 14
},
{
'name': 'Pembunuhan',
'data': 4
},
{
'name': 'Pembunuhan',
'data': 10
}
]
}";
JObject obj = JObject.Parse(test);
JArray categories = (JArray)obj["LineListChart"];
var query = from c in categories group c by c["name"]
into g select new { name = g.Key.ToString(),
data =g.Select(c => (string)c["data"]) };
var res = JsonConvert.SerializeObject(new { LineListChart = query.ToList() });
Я имел в виду вот эту строчку: data = string.Join(",", g.Select(c => (string)c["data"])). Я думаю, что это должно быть: data = g.Select(c => c["data"]) . (Исправление, которое вы уже сделали, хорошо.)
Закрыть, но ваш код преобразует
dataв строку с разделителями-запятыми вместо массива, как того требовал OP.