Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.90/40: Рейтинг темы: голосов - 40, средняя оценка - 4.90
0 / 0 / 0
Регистрация: 18.04.2013
Сообщений: 13

Как перебрать json файл и записать результат в файл?

29.12.2019, 18:20. Показов 8723. Ответов 16
Метки json (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток!
Мне нужно перебрать большой Json файл по значению "sum" и записать в файл( если sum больше 5 то записываем его в файл).
Пример Json файла который я получаю:
JSON
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
{
    "success": true,
    "time": "111111111",
    "currency": "RUB",
    "items": [
        {
            "name": "Name1",
            "sum": "11",
            "price": "2.50"
        },
        {
            "name": "Name2",
            "sum": "11",
            "price": "2.00"
        },
        {
            "name": "Name3",
            "sum": "6",
            "price": "2.50"
        },
        {
            "name": "Name4",
            "sum": "25",
            "price": "2.00"
        },
        {
            "name": "Name5",
            "sum": "2",
            "price": "2.50"
        }
    ]
}
Я скачиваю данный файл перевожу в строку.
C#
1
2
WebClient wc = new WebClient();
            string input = wc.DownloadString("url.json").ToString();
Но сделать дальше не получается - пробовал через foreach но получилось вывести только name по порядку.
PS Зарание спасибо !!!
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
29.12.2019, 18:20
Ответы с готовыми решениями:

Как записать в файл результат запроса
Добрый день. Подскажите пожалуйста, как записать в файл результат запроса using System; using System.Collections.Generic; using...

Записать действия калькулятора и результат в файл
народ подскажите плиз как записать действия калькулятора и результат в файл? namespace sfaf { public partial class Form1 : Form ...

Записать результат программы в текстовый файл
хочу записать результат программы в текстовый файл. но, файл создает, а он пустой. что я делаю не так?, сижу уже часа 2, наверное,...

16
30 / 21 / 9
Регистрация: 22.11.2014
Сообщений: 129
29.12.2019, 18:28
1. Подключаете Json.NET
2. Создаете модель данных по структуре json. Автоматом можно, например здесь: https://app.quicktype.io
3. Десериализуете json.
4. Фильтруете данные.
5. Сериализуете в json.
6. Пишете в файл.
0
0 / 0 / 0
Регистрация: 18.04.2013
Сообщений: 13
30.12.2019, 05:00  [ТС]
serg4242, Я примерно так и делаю, но не могу понять в чем ошибка !

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
public partial class Market
        {
            [JsonProperty("success")]
            public bool Success { get; set; }
 
            [JsonProperty("time")]
            public long Time { get; set; }
 
            [JsonProperty("currency")]
            public string Currency { get; set; }
 
            [JsonProperty("items")]
            public Item[] Items { get; set; }
        }
 
        public partial class Item
        {
            [JsonProperty("name")]
            public string Name { get; set; }
 
            [JsonProperty("sum")]
            public long Sum { get; set; }
 
            [JsonProperty("price")]
            public string Price { get; set; }
        }
        public class RootObject
        {
            public List <Item> response { get; set; }
        }
C#
1
2
3
4
5
6
7
8
9
WebClient wc = new WebClient();
            string json = wc.DownloadString("url.json").ToString();
 
            RootObject dez = JsonConvert.DeserializeObject<RootObject>(json);
 
            foreach (var per in dez.response)
            {
                textBox1.AppendText(per.Sum.ToString());
            }
Но все равно вылетает с ошибкой. На 8 строке ("Ссылка на объект не указывает на экземпляр объекта.")
0
0 / 0 / 0
Регистрация: 26.11.2019
Сообщений: 4
30.12.2019, 05:05
serg4242, помогите,пожалуйста,решить мне задачу. она до этой на форуме.пж
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16140 / 11264 / 2888
Регистрация: 21.04.2018
Сообщений: 33,109
Записей в блоге: 2
30.12.2019, 09:59
Ann0_0, ваша структура для десериализации не соответствует вашему JSON.
Как вы её получали?

В Студии есть специальный инструмент для этого.
Копируете в буфер полностью весь JSON.

Ставите клавиатурный курсор на пустой строке в пространстве имён.
Заходите "Меню" -> "Правка" -> "Специальная вставка" -> "Вставить как JSON классы".
И в месте курсора выставляются коды классов для десериализации.

У меня вышла по вашему JSON такая структура классов
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
    public class Rootobject
    {
        public bool success { get; set; }
        public string time { get; set; }
        public string currency { get; set; }
        public Item[] items { get; set; }
    }
 
    public class Item
    {
        public string name { get; set; }
        public string sum { get; set; }
        public string price { get; set; }
    }
То есть у вас лишний корневой элемент.
3
880 / 559 / 291
Регистрация: 21.11.2012
Сообщений: 1,554
30.12.2019, 11:21
Элд Хасп,

прикольно, не знал
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16140 / 11264 / 2888
Регистрация: 21.04.2018
Сообщений: 33,109
Записей в блоге: 2
30.12.2019, 11:21
Лучший ответ Сообщение было отмечено Ann0_0 как решение

Решение

Ann0_0, arshUwu, вот рабочий код
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
    public class Rootobject
    {
        public bool success { get; set; }
        public string time { get; set; }
        public string currency { get; set; }
        public Item[] items { get; set; }
    }
 
    public class Item
    {
        public string name { get; set; }
        public string sum { get; set; }
        public string price { get; set; }
    }
 
 
    class Program
    {
        static void Main(string[] args)
        {
 
            string json =
@"{
    ""success"": true,
    ""time"": ""111111111"",
    ""currency"": ""RUB"",
    ""items"": [
        {
            ""name"": ""Name1"",
            ""sum"": ""11"",
            ""price"": ""2.50""
        },
        {
            ""name"": ""Name2"",
            ""sum"": ""11"",
            ""price"": ""2.00""
        },
        {
            ""name"": ""Name3"",
            ""sum"": ""6"",
            ""price"": ""2.50""
        },
        {
            ""name"": ""Name4"",
            ""sum"": ""25"",
            ""price"": ""2.00""
        },
        {
            ""name"": ""Name5"",
            ""sum"": ""2"",
            ""price"": ""2.50""
        }
    ]
}";
 
            Rootobject dez = JsonSerializer.Deserialize<Rootobject>(json);
 
            foreach (var per in dez.items)
            {
                Console.WriteLine(per.sum.ToString());
            }
1
0 / 0 / 0
Регистрация: 18.04.2013
Сообщений: 13
30.12.2019, 11:28  [ТС]
Элд Хасп, Получал через сайт где вводил json и получал структуру классов. Изначальный вариант был как у вас , потом я переделал на сайте который скинули выше.

Ошибка также сохранилась - System.NullReferenceException: "Ссылка на объект не указывает на экземпляр объекта."
WindowsFormsApp1.Form1.Item.sum.get вернул null.
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16140 / 11264 / 2888
Регистрация: 21.04.2018
Сообщений: 33,109
Записей в блоге: 2
30.12.2019, 11:44
Ann0_0, значит тот JSON что вы предоставили не соответствует тому который вы получаете в действительности!

Покажи, что вы получите в консоли
C#
1
2
3
           WebClient wc = new WebClient();
            string json = wc.DownloadString("url.json").ToString();
            Console.WriteLine(json); // Что здесь выводится на консоль?
0
0 / 0 / 0
Регистрация: 18.04.2013
Сообщений: 13
30.12.2019, 11:56  [ТС]
Элд Хасп,
Цитата Сообщение от Элд Хасп Посмотреть сообщение
// Что здесь выводится на консоль?
1) Я получаю весь json текстом.


2)Если запускаю вашу программу то на
C#
1
"Rootobject dez = JsonSerializer.Deserialize<Rootobject>(json);
получаю ошибку -не удается преобразовать из "string" в "Newtonsoft.Json.JsonReader"


3)Если запускать в форме то на строке -
C#
1
textBox1.AppendText(per.sum.ToString());
- получаю ошибку - System.NullReferenceException: "Ссылка на объект не указывает на экземпляр объекта."
WindowsFormsApp1.Form1.Item.sum.get вернул null.
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16140 / 11264 / 2888
Регистрация: 21.04.2018
Сообщений: 33,109
Записей в блоге: 2
30.12.2019, 12:02
Цитата Сообщение от Ann0_0 Посмотреть сообщение
Я получаю весь json текстом.
Я понимаю, что вы получаете текст!
Но какой?

Скопируйте сюда в тему полученный текст.
0
880 / 559 / 291
Регистрация: 21.11.2012
Сообщений: 1,554
30.12.2019, 12:08
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
    [DataContract]
    public class Rootobject
    {
        [DataMember]
        public bool success { get; set; }
        [DataMember]
        public string time { get; set; }
        [DataMember]
        public string currency { get; set; }
        [DataMember]
        public Item[] items { get; set; }
    }
 
    [DataContract]
    public class Item
    {
        [DataMember]
        public string name { get; set; }
        [DataMember]
        public string sum { get; set; }
        [DataMember]
        public string price { get; set; }
    }
 
        static void Main(string[] args)
        {
            string json =
            @"{
                ""success"": true,
                ""time"": ""111111111"",
                ""currency"": ""RUB"",
                ""items"": [
                    {
                        ""name"": ""Name1"",
                        ""sum"": ""11"",
                        ""price"": ""2.50""
                    },
                    {
                        ""name"": ""Name2"",
                        ""sum"": ""11"",
                        ""price"": ""2.00""
                    },
                    {
                        ""name"": ""Name3"",
                        ""sum"": ""6"",
                        ""price"": ""2.50""
                    },
                    {
                        ""name"": ""Name4"",
                        ""sum"": ""25"",
                        ""price"": ""2.00""
                    },
                    {
                        ""name"": ""Name5"",
                        ""sum"": ""2"",
                        ""price"": ""2.50""
                    }
                ]
            }";
 
            using (var ms = new MemoryStream(Encoding.Unicode.GetBytes(json)))
            {
                // Deserialization from JSON  
                DataContractJsonSerializer deserializer = new DataContractJsonSerializer(typeof(Rootobject));
                Rootobject bsObj2 = (Rootobject)deserializer.ReadObject(ms);
            }
 
            Console.ReadLine();
        }
0
30 / 21 / 9
Регистрация: 22.11.2014
Сообщений: 129
30.12.2019, 12:25
Лучший ответ Сообщение было отмечено Ann0_0 как решение

Решение

Цитата Сообщение от Ann0_0 Посмотреть сообщение
Ошибка также сохранилась - System.NullReferenceException: "Ссылка на объект не указывает на экземпляр объекта."
WindowsFormsApp1.Form1.Item.sum.get вернул null.
На тестовых данных (которые здесь) работает? Можно одна из Items приходит без поля sum, или оно там по-другому называется, или пустое? Посмотрите на каком конкретно item спотыкается код.
1
0 / 0 / 0
Регистрация: 18.04.2013
Сообщений: 13
30.12.2019, 12:47  [ТС]
Элд Хасп,
C#
1
{"success": true,"time": "111111111","currency": "RUB","items": [{"name": "Name1","sum": "11","price": "2.50"},{"name": "Name2","sum": "11","price": "2.00"},{"name": "Name3","sum": "6","price": "2.50"},{"name": "Name4","sum": "25","price": "2.00"},{"name": "Name5","sum": "2","price": "2.50"}]}
Добавлено через 9 минут
serg4242, Да вы были правы, некоторые значение с полного файла приходили пустыми...
Поэтому наверное если искать по имени то он выводил все без ошибок.
Большое спасибо.
0
es geht mir gut
 Аватар для SoftIce
11274 / 4760 / 1183
Регистрация: 27.07.2011
Сообщений: 11,439
30.12.2019, 13:02
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Заходите "Меню" -> "Правка" -> "Специальная вставка" -> "Вставить как JSON классы".
Что-то я не нахожу такого у себя. Где-то чего-то нужно добавить или включить ?
Миниатюры
Как перебрать json файл и записать результат в файл?  
0
0 / 0 / 0
Регистрация: 18.04.2013
Сообщений: 13
30.12.2019, 13:07  [ТС]
serg4242, Элд Хасп,
Да идеально даже перебор заработал без проблем. Спасибо большое !!!
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16140 / 11264 / 2888
Регистрация: 21.04.2018
Сообщений: 33,109
Записей в блоге: 2
30.12.2019, 13:36
Цитата Сообщение от SoftIce Посмотреть сообщение
Что-то я не нахожу такого у себя. Где-то чего-то нужно добавить или включить ?
Меню "Правка" меняется в зависимости от того какой файл редактируется и что находится в буфере обмена.
Поэтому прочитайте последовательность действий.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
30.12.2019, 13:36
Помогаю со студенческими работами здесь

Записать результат выполнения программы в текстовый файл
c# Мне нужно записать текст программы в начало текстового файла,но с помощью окна выбора файлов OpenFileDialog. Напишите пожалуйста...

Записать в текстовый файл результат расчёта функции f(y)
Результат должен быть записан в виде двух столбцов - аргумента и значение функции от данного аргумента. Начало и конец диапазона , имя...

Записать в текстовый файл результат расчёта функции f(y)
Задание 1). Записать в текстовый файл результат расчёта функции f(y).Результат должен быть записан в виде двух столбцов - аргумента и...

Считать матрицу в файле и умножить её на 2, затем результат записать в новый файл
дан файл с матрицей 4 5 6 6 4 5 3 2 8 2 7 3 надо считать матрицу в файле и умножить её на 2, затем результат записать в...

Удалить в каждой строке лидирующие пробелы и записать результат в другой файл
Здравствуйте! подскажите пожалуйста. Как написать программу на языке С#, которая считывает текст из файла, удаляет в каждой строке...


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

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Новые блоги и статьи
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru