Изменить структуру JSON - PullRequest
0 голосов
/ 27 июня 2019

Я хочу связать данные из базы данных с линейной диаграммой, но у меня возникают трудности при создании формата 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]
    }
   ]
}

Ответы [ 3 ]

2 голосов
/ 27 июня 2019

Используя 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

2 голосов
/ 27 июня 2019

вы можете использовать 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.log(chartData)
1 голос
/ 27 июня 2019

Поскольку вопрос json.net, я предоставляю ответ на C # с 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() });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...