Member 13284316 Ответов: 2

Группировка по результату массива json с тем же именем ключа C#


public class NameDTO
{
    public string Name;
}

public class ValDTO
{
    public string Val;
}

_nameDetials = new List<NameDTO>();


В List _nameDetials я получаю ключи, а в _valDetails - значения, которые я использовал ниже для блока и добавил их в массив. В приведенных ниже значениях я получаю счет 20 в каждом из списков.

JArray jChildArray = новый JArray();
for (int i = 0; i < Math.Max(_nameDetials.Count, _valDetials.Count); i++)
{
    JObject jChildObject = new JObject();
    jChildObject.Add(_nameDetials[i].Name, _valDetials[i].Val);
    jChildArray.Add(jChildObject);
}


У меня есть массив json, как показано ниже
[
  {
    "message-Code": "   0"
  },
  {
    "msg-Number-Pos1": "0"
  },
  {
    "msg-Number-Pos2": "0"
  },
  {
    "msg-Number-Pos3": " "
  },
  {
    "message-Code": "   0"
  },
  {
    "msg-Number-Pos1": "0"
  },
  {
    "msg-Number-Pos2": "0"
  },
  {
    "msg-Number-Pos3": " "
  },
  {
    "message-Code": "   0"
  },
  {
    "msg-Number-Pos1": "0"
  },
  {
    "msg-Number-Pos2": "0"
  },
  {
    "msg-Number-Pos3": " "
  },
  {
    "message-Code": "   0"
  },
  {
    "msg-Number-Pos1": "0"
  },
  {
    "msg-Number-Pos2": "0"
  },
  {
    "msg-Number-Pos3": " "
  },
  {
    "message-Code": "   0"
  },
  {
    "msg-Number-Pos1": "0"
  },
  {
    "msg-Number-Pos2": "0"
  },
  {
    "msg-Number-Pos3": "0"
  }
]

Я хочу сгруппировать эти данные, чтобы получить результат, как показано ниже.

[
    {
      "message-Code": "  0",
      "msg-Number-Pos1": "0",
      "msg-Number-Pos2": "0",
      "msg-Number-Pos3": "0"
    },
    {
      "message-Code": "  0",
      "msg-Number-Pos1": "0",
      "msg-Number-Pos2": "0",
      "msg-Number-Pos3": "0"
    },
    {
      "message-Code": "  0",
      "msg-Number-Pos1": "0",
      "msg-Number-Pos2": "0",
      "msg-Number-Pos3": "0"
    },
    {
      "message-Code": "  0",
      "msg-Number-Pos1": "0",
      "msg-Number-Pos2": "0",
      "msg-Number-Pos3": "0"
    },
    {
      "message-Code": "  0",
      "msg-Number-Pos1": "0",
      "msg-Number-Pos2": "0",
      "msg-Number-Pos3": "0"
    }
]


Я хочу сгруппироваться на основе одних и тех же ключевых имен.


Я не могу проследить, что именно я упускаю.Или мы можем сгруппировать массив json в равное число, то есть 4 в моем случае.
Я новичок в c# и не могу найти подходящий код.
Кто-нибудь может помочь? Спасибо.

Что я уже пробовал:

Я попробовал следующий код

var grouparray = (from t in jChildArray
                  group t by new { t }
                  into grp
                  select grp.Key.t).ToList();

2 Ответов

Рейтинг:
2

Richard Deeming

Как насчет чего-то вроде этого:

JObject jChildObject = null;

// NB: Can't use "Max" here, or you risk going beyond the end of one of the arrays:
int length = Math.Min(_nameDetails.Count, _valDetails.Count); 

for (int i = 0; i < length; i++)
{
    string name = _nameDetails[i].Name;
    if (jChildObject == null)
    {
        jChildObject = new JObject();
    }
    else if (string.Equals(name, "message-Code", StringComparison.Ordinal))
    {
        jChildArray.Add(jChildObject);
        jChildObject = new JObject();
    }
    
    jChildObject.Add(name, _valDetials[i].Val);
}

if (jChildObject != null)
{
    jChildArray.Add(jChildObject);
}


Рейтинг:
0

Andy Lanng

Группировка имеет сходные характеристики. Вы хотите противоположного. Нет никакой функции, которая когда-либо сделает это за вас.

Вот почему:

У вас есть массив . Первый "message-Code" мы знаем, что должны пойти с первым "msg-Number-Pos1", но что касается массива, то это всего лишь строки.

Есть способы "обмануть" Тхо. Если вы знаете, что информация поступает в наборах по 4, то вы можете использовать своего рода индекс, чтобы сгруппировать их:

var grouparray =
    jChildArray
        .Select((pair,i)=>new {index = i/4, pair})
        .GroupBy(a=>a.index);

Это дает вам группировку с каждым набором из 4 человек.
Имейте в виду, что я бы счел это плохим решением простой проблемы

Для начала у вас теперь есть только массив массивов пар строк. Почему бы не решить проблему с Джарреем в первую очередь?