Добавить данные в файл JSON в C #

2

Как я буду добавлять данные для добавления? У меня есть это:

{
  "13232": [
    "2012952"
  ]
}

И я хочу добавить к нему другой объект, например:

{
  "13232": [
    "2012952"
  ],
  "19213": [
    "2016086"
  ]
}

Это код, который я использую:

JArray array = new JArray();
array.Add(Itemid);

JObject o = new JObject();
o[Userid] = array;

string json = o.ToString(Formatting.Indented);
//i know this keeps appending text but how would i append it inside the { and }?
File.AppendAllText("E:/media.json", json);

Я в буквальном смысле понятия не имею, как продолжать добавлять его, но, возможно, у кого-то еще есть?

  • 0
    Вам необходимо прочитать данные из существующего файла, десериализовать его из JSON в JArray , добавить новые данные в этот JArray и перезаписать старый файл обновленными данными.
Теги:

3 ответа

4
Лучший ответ

Вы не сможете использовать операции добавления файлов для этого. Операции добавления файлов могут только добавлять текст в конец, они не могут вставлять текст в какой-то точке посередине. Это делает невозможным использование file-append для сохранения JSON.

У вас есть два варианта, о которых я могу думать:

  1. Прочитайте весь файл в объекте, добавьте свой объект и перепишите весь файл (низкая производительность)
  2. Откройте файл для чтения/записи, проанализируйте его до тех пор, пока не дойдете до закрывающей фигурной скобки, а затем напишите оставшиеся данные, а затем напишите тесную фигурную скобку (не тривиальную)
1

Я рекомендую вам использовать Newtonsoft Json lib, доступный как пакет nuget.

Вы можете сделать класс модели для представления на json-узле, тогда вы можете де-сериализовать вас Json для этой модели и построить массив, содержащий новый элемент в конце, а затем повторно сериализовать его на json after.

Посмотрите эту страницу MSDN об этом: https://msdn.microsoft.com/en-us/library/bb412179(v=vs.110).aspx

Редактировать: актуальная документация NewtonSoft

Поэтапно: 1 Уничтожить коллекцию

2: И новый экземпляр класса с listName.Add(className);

3: Повторная сортировка коллекции

0

Самый безопасный подход - read-update-rewrite (применяется к JSON и XML-формату, поскольку они не поддерживают добавление).

Следующая опция, если вы можете жить с недействительным JSON, - это просто объединить фрагменты JSON с кодом, который у вас есть, а затем использовать SupportMultipleContent в JsonReader для чтения фрагментов. Чтение нескольких фрагментов с помощью JsonReader

Если эти подходы не работают и ваш формат фиксирован - найдите позицию последнего ] в файле, найдите там поток и напишите новые элементы массива и добавьте ]}.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню