Мне нужно превратить .json в массив - PullRequest
0 голосов
/ 05 апреля 2019

Я создаю приложение, которое управляет расписаниями для моей школы с единством. Я хотел бы поработать с огромным файлом JSON, который у нас есть. Я думаю, что превратить его в массив будет проще всего

Извинения за раздувание, хотя это всего лишь ~ 1% от того, что у нас есть.

[
  {
    "DayNumber": "2",
    "Period": "4",
    "ClassCode": "9HM.A2",
    "TeacherCode": "YOUB",
    "RoomCode" : "205",
    "ClassTime" : "12:40"
  },
  {
    "DayNumber": "3",
    "Period": "2",
    "ClassCode": "9HM.A2",
    "TeacherCode": "YOUB",
    "RoomCode" : "205",
    "ClassTime" : "10:00"
  },
  {
    "DayNumber": "5",
    "Period": "3",
    "ClassCode": "9HM.A2",
    "TeacherCode": "YOUB",
    "RoomCode" : "205",
    "ClassTime" : "11:08"
  },
  {
    "DayNumber": "8",
    "Period": "3",
    "ClassCode": "9HM.A2",
    "TeacherCode": "YOUB",
    "RoomCode" : "205",
    "ClassTime" : "11:20"
  },
  {
    "DayNumber": "10",
    "Period": "3",
    "ClassCode": "9HM.A2",
    "TeacherCode": "YOUB",
    "RoomCode": "205",
    "ClassTime": "11:08"
  },
  {
    "DayNumber": "1",
    "Period": "6",
    "ClassCode": "9IST.B1",
    "TeacherCode": "FRWK",
    "RoomCode" : "166",
    "ClassTime" : "14:27"
  },
  {
    "DayNumber": "4",
    "Period": "3",
    "ClassCode": "9IST.B1",
    "TeacherCode": "FRWK",
    "RoomCode" : "166",
    "ClassTime" : "11:40"
  },
  {
    "DayNumber": "5",
    "Period": "6",
    "ClassCode": "9IST.B1",
    "TeacherCode": "FRWK",
    "RoomCode" : "166",
    "ClassTime" : "14:27"
  },
  {
    "DayNumber": "6",
    "Period": "6",
    "ClassCode": "9IST.B1",
    "TeacherCode": "FRWK",
    "RoomCode" : "166",
    "ClassTime" : "14:27"
  },
  {
    "DayNumber": "9",
    "Period": "3",
    "ClassCode": "9IST.B1",
    "TeacherCode": "FRWK",
    "RoomCode" : "166",
    "ClassTime" : "11:40"
  },
  {
    "DayNumber": "2",
    "Period": "5",
    "ClassCode": "9SC.5",
    "TeacherCode": "TRUC",
    "RoomCode" : "27",
    "ClassTime" : "14:20"
  },
  {
    "DayNumber": "3",
    "Period": "3",
    "ClassCode": "9SC.5",
    "TeacherCode": "TRUC",
    "RoomCode" : "27",
    "ClassTime" : "11:20"
  },
  {
    "DayNumber": "4",
    "Period": "2",
    "ClassCode": "9SC.5",
    "TeacherCode": "TRUC",
    "RoomCode" : "27",
    "ClassTime" : "10:00"
  },
  {
    "DayNumber": "5",
    "Period": "4",
    "ClassCode": "9SC.5",
    "TeacherCode": "TRUC",
    "RoomCode" : "27",
    "ClassTime" : "12:01"
  },
  {
    "DayNumber": "7",
    "Period": "5",
    "ClassCode": "9SC.5",
    "TeacherCode": "TRUC",
    "RoomCode" : "27",
    "ClassTime" : "14:20"
  },
  {
    "DayNumber": "8",
    "Period": "2",
    "ClassCode": "9SC.5",
    "TeacherCode": "TRUC",
    "RoomCode" : "27",
    "ClassTime" : "10:00"
  },
  {
    "DayNumber": "9",
    "Period": "2",
    "ClassCode": "9SC.5",
    "TeacherCode": "TRUC",
    "RoomCode" : "27",
    "ClassTime" : "10:00"
  },
  {
    "DayNumber": "10",
    "Period": "4",
    "ClassCode": "9SC.5",
    "TeacherCode": "TRUC",
    "RoomCode" : "27",
    "ClassTime" : "12:01"
  }
]

Я бы хотел превратить это в это автоматически, или даже выяснить, как я могу обработать вышеуказанный файл в c #

string[][] _9HM_A2 = new string[][]
{
    new string[] {"2", "4", "9HM.A2", "YOUB", "205", "12:40"},
    new string[] {"3", "2", "9HM.A2", "YOUB", "205", "10:00"},
    new string[] {"5", "3", "9HM.A2", "YOUB", "205", "11:08"},
    new string[] {"8", "3", "9HM.A2", "YOUB", "205", "11:20"},
    new string[] {"10", "3", "9HM.A2", "YOUB", "205", "11:08"},
};
    string[][] _9IST_B1 = new string[][]
{
    new string[] { "1", "6", "9IST.B1", "FRWK", "166", "14:27"},
    new string[] {"4", "3", "9IST.B1", "FRWK", "166", "11:40"},
    new string[] {"5", "6", "9IST.B1", "FRWK", "166", "14:27"},
    new string[] {"6", "6", "9IST.B1", "FRWK", "166", "14:27"},
    new string[] {"9", "3", "9IST.B1", "FRWK", "166", "11:40"},
};
    string[][] _9SC_5 = new string[][]
{
    new string[] { "2", "5", "9SC.5", "TRUC", "27", "14:20"},
    new string[] { "3", "3", "9SC.5", "TRUC", "27", "11:20"},
    new string[] { "4", "2", "9SC.5", "TRUC", "27", "10:00"},
    new string[] { "5", "4", "9SC.5", "TRUC", "27", "12:01"},
    new string[] { "7", "5", "9SC.5", "TRUC", "27", "14:20"},
    new string[] { "8", "2", "9SC.5", "TRUC", "27", "10:00"},
    new string[] { "9", "2", "9SC.5", "TRUC", "27", "10:00"},
    new string[] { "10", "4", "9SC.5", "TRUC", "27", "12:01"},
};

1 Ответ

0 голосов
/ 05 апреля 2019

Если это огромный json-файл, то, возможно, вместо массива вы должны рассмотреть возможность использования базы данных с минимальной массой.Если вам необходимо выполнить агрегацию данных, база данных подойдет лучше.Загрузка огромного файла JSON в массив может поглотить ваши ресурсы памяти.Но если вы все еще хотите попробовать массив, почему бы не использовать словарь списков.

Мои предположения, основанные на вашем примере json, состоят в том, что структура этого json не изменится, поэтому вы можете отобразить класс ac # POCOк этим данным.

public class ClassSched
    {
        public string DayNumber { get; set; }
        public string Period { get; set; }
        public string ClassCode { get; set; }
        public string TeacherCode { get; set; }
        public string RoomCode { get; set; }
        public string ClassTime { get; set; }
    }

А вот фрагмент того, как я мог бы хотеть сохранить эти данные.

Dictionary<string, List<ClassSched>> dictClassSched = new Dictionary<string, List<ClassSched>>();

/*
    * Here you open up your Json file and read it,
    * then you loop over the rows
    * and grab the class Code and assign it to classCode variable
    * and assign the row of the json into the jsonRow variable.
    * 
    */

var c = JsonConvert.DeserializeObject<ClassSched>(jsonrow.ToString());
if ( dictClassSched.TryGetValue(classCode, out List<ClassSched> scheds))
{
    scheds.Add(c);
    dictClassSched[classCode] = scheds;
}
else
{
    dictClassSched.Add(classCode, new List<ClassSched>() { c });
}

Итак, выше мы десериализовали строку json в POCO.затем мы берем classCode и ищем его в словаре, если мы находим попадание, то переменная scheds заполняется содержимым.Затем мы вставляем новую строку, затем возвращаем список обратно в словарь.Если мы не найдем запись для этого кода класса, то создадим новый список и назначим ему экземпляр classSched.

-HTH

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...