Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/21: Рейтинг темы: голосов - 21, средняя оценка - 4.71
10 / 10 / 1
Регистрация: 27.11.2011
Сообщений: 153

Чтение и модификация существующего json файла

07.11.2017, 16:45. Показов 4019. Ответов 7

Студворк — интернет-сервис помощи студентам
Добрых времени суток. Появилась прочитать и модифицировать json файлик (ранее обходился только чтением/записью). Теперь Выглядит сам json так:
JSON
1
2
[{"datetime":"07.11.2017_15:25:10","path_to_file":"some_path", "status":"successfully"},
 {"datetime":"07.11.2017_15:28:25","path_to_file":"some_path", "status":"bad"}]
То есть, найти все ветки json'a где статус bad, получить из этих веток путь к файлу, сделать с файлом некоторые действия, если они успешны, меняем статус той ветки, откуда был взят путь на successfully. Буду рад любой помощи)
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
07.11.2017, 16:45
Ответы с готовыми решениями:

Запись звукового файла поверх существующего mp3 файла
Привет всем. Ситуация интересная. Есть около 3000 mp3 файлов. Есть записан файл, звук из которого нужно вставить в эти 3000 файлов. Ну...

Чтение JSON-файла с помощью Newtonsoft.Json
И так, у нас есть JSon-файл вот такого типа: { "objects": { "minecraft/sounds/entity/rabbit/attack2.ogg": { ...

Чтение JSON файла
Здравствуйте! Только начал работать с json, нужна помощь знающих. Помогите пожалуйста с проблемой: Есть json-файл такого типа: { ...

7
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18242 / 14156 / 5366
Регистрация: 17.03.2014
Сообщений: 28,846
Записей в блоге: 1
07.11.2017, 18:15
lFreeManl, как-то так. Используется Json.NET
C#
1
2
3
4
5
6
7
8
9
10
11
12
string json = @"[{""datetime"":""07.11.2017_15:25:10"",""path_to_file"":""some_path"", ""status"":""successfully""},
{""datetime"":""07.11.2017_15:28:25"",""path_to_file"":""some_path"", ""status"":""bad""}]";
JArray jroot = JArray.Parse(json);
foreach (var jobj in jroot)
{   
    if ((string)jobj["status"] == "bad")
    {
        string path_to_file = (string)jobj["path_to_file"];
        // ...
        if (smth) jobj["status"] = "successfully";
    }
}
0
10 / 10 / 1
Регистрация: 27.11.2011
Сообщений: 153
07.11.2017, 22:31  [ТС]
OwenGlendower, спасибо,а еще такой момент, как эффективней изменить запись именно в самом файле, что бы его целиком не перезаписывать? А то мне кажется, в конце месяца (срок хранения лога), файлик будет довольно тяжелый
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18242 / 14156 / 5366
Регистрация: 17.03.2014
Сообщений: 28,846
Записей в блоге: 1
08.11.2017, 00:08
lFreeManl, боюсь что файл в любом случае придется записывать целиком. Возможно не стоит забегать вперед с оптимизациями не зная насколько большой будет файл и как его размер отразится на скорости.
0
burning1ife
 Аватар для kenny69
1466 / 1287 / 294
Регистрация: 21.09.2008
Сообщений: 3,438
Записей в блоге: 9
09.11.2017, 01:07
Цитата Сообщение от lFreeManl Посмотреть сообщение
То есть, найти все ветки json'a где статус bad, получить из этих веток путь к файлу, сделать с файлом некоторые действия, если они успешны, меняем статус той ветки, откуда был взят путь на successfully. Буду рад любой помощи)
Если вы сами записываете данные в файл и те, которые были successfull не изменяют своего состояния, то я бы хранил bad в одном файле, а successfull в другом файле.
Когда нужно читаем все из файла bad, производим некоторые действия, если успех - дописать в successfull, а если нет - перезапись в bad всех, которые не прошли.

Добавлено через 1 минуту
И если это вся иерархия объекта (дата и путь к файлу), то я бы писал просто в txt
0
TheGreatCornholio
 Аватар для Woldemar89
1255 / 733 / 285
Регистрация: 30.07.2015
Сообщений: 2,408
09.11.2017, 09:38
Цитата Сообщение от lFreeManl Посмотреть сообщение
файлик будет довольно тяжелый
Есть вариант на БД перейти тогда, SQLite например.
Ну или NoSql с хранением в BinaryJson.
0
10 / 10 / 1
Регистрация: 27.11.2011
Сообщений: 153
09.11.2017, 21:21  [ТС]
kenny69, да, Вы правы, я тоже пришел к мысли с разделением лога.
Но так как я этот json никогда не любил, сейчас возникли с ним трудности, и простите за наглость, но не могли бы вы мне кое-что разжевать, относительно самой его структуры и библиотеки JSON.NET

В общем остановился на такой структуре лога:
JSON
1
2
3
4
5
6
7
8
9
10
11
12
13
14
[
     "bad":
     {
          "datetime":"",
          "path_to_photo":"",
          "что-то еще":""
     },
     "successfully":
     {
          "datetime":"",
          "path_to_photo":"",
          "что-то еще":""
     }
]
Эти данные уже приходят мне в json формате из другой функции в виде:
JSON
1
{"datetime":"", "path_to_photo":"", "что-то еще":""}
При этом иформация о том, успешна была ли с ними операция хранится в отдельной переменной. Теперь имея на руках всё необходимое, пишем их в лог(в качестве примера, давайте пока будем писать все в 1 файлик).
C#
1
2
3
4
5
6
7
8
9
10
public static void WriteDataToLog(string jsonObj, bool status)
{
      //если имеем доступ к логу
      if (isLogFileAvailable)
      {
          string currentJsonLog = System.IO.File.ReadAllText(logFile);
 
      }
 
}
И вот тут я почему-то зависаю.... Вопросов вроде как несколько:
1. Если файла ранее создано не было(он будет пуст после создания другой функцией), значит мы его читать не должны, ибо JArray.Parse() упадет с ошибкой. Тогда мы просто создаем новый JArray, в который будет записана первая запись?
2. Как этот самый JArray привести к нужному виду? Вот так у меня вышла какая-то каша. Сам то код отработал, но json оказался кривым((
C#
1
2
JObject jo = new JObject();
jo.Add("bad/successfully", JToken.Parse(jsonObj));
3. Как теперь этот JObject добавить к уже имеющемуся логу или в пустой файл?

Не по теме:

P.S. Не кидайтесь тапками :-[

0
burning1ife
 Аватар для kenny69
1466 / 1287 / 294
Регистрация: 21.09.2008
Сообщений: 3,438
Записей в блоге: 9
10.11.2017, 06:52
Цитата Сообщение от lFreeManl Посмотреть сообщение
В общем остановился на такой структуре лога:
Я говорил про 2 разных файла. Названия пусть bad.txt и success.txt, а объект, которые вы описываете остается тот же.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
10.11.2017, 06:52
Помогаю со студенческими работами здесь

Чтение файла с данными JSON дает null
Всем привет, имеется файл с данными объекта в формате JSON, полученный в результате успешной сериализации, но десериализировать не...

Редактирование существующего файла
Доброго времени суток! Я не могу понять почему не выполняется перезапись уже имеющегося файла *.dat. Я считываю с него данные в...

В конец существующего файла записать число и фразу
В конец существующего файла записать: а) число 0; б) фразу До свидания!.

Модификация файла hosts
Мне нужно определенный домен на время занести в файл хост, выходит MessageBox человек нажимает ок в это время в хост заносится домен. ...

Чтение JSON
Добрый день/вечер! Сломал всю голову, подключился к longpoll серверу, получаю ответ: { ts: 196851352, updates: , , 85635407,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru