Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.84/25: Рейтинг темы: голосов - 25, средняя оценка - 4.84
 Аватар для Nekromio
0 / 0 / 0
Регистрация: 02.04.2019
Сообщений: 69

Чтение файла json через url

24.12.2021, 22:57. Показов 5613. Ответов 27

Ребят подскажите как можно считать файл json по url, необходимо следующий код переделать из считыванию по пути, в считывания по url

C#
1
2
3
4
5
6
7
8
9
private void BasicPart()
{
    Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
    var enc1251 = Encoding.GetEncoding(1251);
    var filePath = "/vs/Test 2.0/json1.json";
    var fileContent = System.IO.File.ReadAllText(filePath, enc1251);
 
    Rootobject Object = Newtonsoft.Json.JsonConvert.DeserializeObject<Rootobject>(fileContent);
}
То есть хотелось бы, не скачивать в определённое место файл, а потом его считывать, а сразу считать. Кто подскажет?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
24.12.2021, 22:57
Ответы с готовыми решениями:

Чтение файла по url
Подскажите искал на форуме есть тока чтение из файла лежащего на диске как прочесть файл http://gwergrgr.fg/News.txt и запихать его в...

Чтение и модификация существующего json файла
Добрых времени суток. Появилась прочитать и модифицировать json файлик (ранее обходился только чтением/записью). Теперь Выглядит сам json...

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

27
 Аватар для Nekromio
0 / 0 / 0
Регистрация: 02.04.2019
Сообщений: 69
31.12.2021, 10:29  [ТС]
Цитата Сообщение от I2um1 Посмотреть сообщение
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
using System.Net.Http;
using System.Text;
 
Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
 
var url = "";
using var client = new HttpClient();
using HttpResponseMessage response = await client.GetAsync(url);
response.EnsureSuccessStatusCode();
 
string json = await response.Content.ReadAsStringAsync();
 
Rootobject object2 = System.Text.Json.JsonSerializer.Deserialize<Rootobject>(json);
 
sealed class Rootobject
{
    public Ticket[] Tickets { get; set; }
}
 
sealed class Ticket
{
    public int ticket_id { get; set; }
    public TicketContent[] ticket_content { get; set; }
}
 
sealed class TicketContent
{
    public string id { get; set; }
    public string question { get; set; }
    public string[] response_options { get; set; }
    public string correct_answer { get; set; }
    public string type_question { get; set; }
}

Надо смотреть какой HTTP запрос ожидает сайт и какой отдает ответ. Есть риск, что заголовка не будет или будет неправильный. Или сайт вообще может отдавать не json, а например json внутри html.

Если сайт не отдает правильный заголовок контента или отдает неправильный, но известно, что это json в кодировке 1251, то можно сделать так:
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
using System.Net.Http;
using System.Text;
 
Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
 
var url = "";
using var client = new HttpClient();
using HttpResponseMessage response = await client.GetAsync(url);
response.EnsureSuccessStatusCode();
 
byte[] bytes = await response.Content.ReadAsByteArrayAsync();
string json = Encoding.GetEncoding(1251).GetString(bytes);
 
Rootobject object2 = System.Text.Json.JsonSerializer.Deserialize<Rootobject>(json);
 
sealed class Rootobject
{
    public Ticket[] Tickets { get; set; }
}
 
sealed class Ticket
{
    public int ticket_id { get; set; }
    public TicketContent[] ticket_content { get; set; }
}
 
sealed class TicketContent
{
    public string id { get; set; }
    public string question { get; set; }
    public string[] response_options { get; set; }
    public string correct_answer { get; set; }
    public string type_question { get; set; }
}
Выдаёт ошибку:
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
async Task BasicPart()
{
    Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
 
    var url = "https://mysite.ru/json1.json";
    using var client = new HttpClient();
    using HttpResponseMessage response = await client.GetAsync(url);
    response.EnsureSuccessStatusCode();
 
    byte[] bytes = await response.Content.ReadAsByteArrayAsync();
    string json = Encoding.GetEncoding(1251).GetString(bytes);
 
    Rootobject Object = System.Text.Json.JsonSerializer.Deserialize<Rootobject>(json);
    
    /*
    Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
 
    var url = "https://mysite.ru/json1.json";
    using var client = new HttpClient();
    using HttpResponseMessage response = await client.GetAsync(url);
    response.EnsureSuccessStatusCode();
     
    string json = await response.Content.ReadAsStringAsync();
     
    Rootobject Object = System.Text.Json.JsonSerializer.Deserialize<Rootobject>(json);
    */
}
 
private async void button1_Click(object sender, EventArgs e)
{
    await BasicPart();
}

Если нужен
Кликните здесь для просмотра всего текста

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
using System.Collections.Generic;
using Newtonsoft.Json;
 
namespace Test_2._0
{
    public class Rootobject
    {
        public Ticket[] Tickets { get; set; }
    }
 
    public class Ticket
    {
        public int ticket_id { get; set; }
        public Ticket_Content[] ticket_content { get; set; }
    }
 
    public class Ticket_Content
    {
        [JsonProperty("id")]
        public string Id { get; set; }
 
        [JsonProperty("question")]
        public string QuestionText { get; set; }
 
        [JsonProperty("response_options")]
        public List<string> ResponseOptions { get; set; }
 
        [JsonProperty("correct_answer")]
        public string CorrectAnswer { get; set; }
 
        [JsonProperty("type_question")]
        public string TypeQuestion { get; set; }
    }
}
Миниатюры
Чтение файла json через url  
0
Эксперт .NET
6691 / 4102 / 1607
Регистрация: 09.05.2015
Сообщений: 9,576
31.12.2021, 10:42
Давно бы уже ссылку на ваш json бы выложили для теста (именно то место, откуда вы сами его хотите прочитать, чтобы условия были одинаковые), чтобы мы не гадали что у вас там не так...

А еще у вас как-то странно показывает место ошибки, должно указывать на конкретную строку в методе, где произошло исключение, а не на место вызова этого метода...
1
 Аватар для Nekromio
0 / 0 / 0
Регистрация: 02.04.2019
Сообщений: 69
31.12.2021, 10:45  [ТС]
Цитата Сообщение от Someone007 Посмотреть сообщение
Давно бы уже ссылку на ваш json бы выложили для теста (именно то место, откуда вы сами его хотите прочитать, чтобы условия были одинаковые), чтобы мы не гадали что у вас там не так...

А еще у вас как-то странно показывает место ошибки, должно указывать на конкретную строку в методе, где произошло исключение, а не на место вызова этого метода...
https://test.tor2.ru/ticket/json1.json

Вот ссылка на сам файл
0
Эксперт .NET
6691 / 4102 / 1607
Регистрация: 09.05.2015
Сообщений: 9,576
31.12.2021, 13:52
Ну что я могу сказать, ваш код из поста Чтение файла json через url в принципе рабочий, у меня никаких ошибок не возникает, только атрибут использован неверный. Нужно вместо JsonProperty использовать JsonPropertyName, иначе все свойства в Ticket_Content будут null...

Проверялось на .NET 6. Если у вас другой Target Framework, напишите какой...

Добавлено через 12 минут
Кодировка в файле действительно 1251, сервер кодировку не отправляет. Если вы поменяете кодировку в файле на utf8, то с ним будет намного проще работать, достаточно будет пары строк как написано в посте Чтение файла json через url
1
 Аватар для Nekromio
0 / 0 / 0
Регистрация: 02.04.2019
Сообщений: 69
31.12.2021, 15:02  [ТС]
Цитата Сообщение от Someone007 Посмотреть сообщение
Ну что я могу сказать, ваш код из поста Чтение файла json через url в принципе рабочий, у меня никаких ошибок не возникает, только атрибут использован неверный. Нужно вместо JsonProperty использовать JsonPropertyName, иначе все свойства в Ticket_Content будут null...

Проверялось на .NET 6. Если у вас другой Target Framework, напишите какой...

Добавлено через 12 минут
Кодировка в файле действительно 1251, сервер кодировку не отправляет. Если вы поменяете кодировку в файле на utf8, то с ним будет намного проще работать, достаточно будет пары строк как написано в посте Чтение файла json через url
Так всё работает, но если поменять на System.Text.Json, то опять ошибка чтения.
C#
1
2
3
4
5
6
7
8
9
10
11
Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
 
            var url = "https://test.tor2.ru/ticket/json1.json";
            using var client = new HttpClient();
            using HttpResponseMessage response = await client.GetAsync(url);
            response.EnsureSuccessStatusCode();
 
            string json = await response.Content.ReadAsStringAsync();
 
            //Rootobject Object = System.Text.Json.JsonSerializer.Deserialize<Rootobject>(json);
            Rootobject Object = Newtonsoft.Json.JsonConvert.DeserializeObject<Rootobject>(json);
Большое спасибо вам за помощь.

Да, я поменял кодировку файла на UTF8 Без bom
0
Эксперт .NET
6691 / 4102 / 1607
Регистрация: 09.05.2015
Сообщений: 9,576
31.12.2021, 15:05
Цитата Сообщение от Nekromio Посмотреть сообщение
Да, я поменял кодировку файла на UTF8 Без bom
Я заметил. Теперь у меня код
C#
1
2
3
var url = "https://test.tor2.ru/ticket/json1.json";
using var client = new HttpClient();
var obj = await client.GetFromJsonAsync<Rootobject>(url);
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
public class Rootobject
{
    public Ticket[] Tickets { get; set; }
}
 
public class Ticket
{
    public int ticket_id { get; set; }
    public Ticket_Content[] ticket_content { get; set; }
}
 
public class Ticket_Content
{
    [JsonPropertyName("id")]
    public string Id { get; set; }
 
    [JsonPropertyName("question")]
    public string QuestionText { get; set; }
 
    [JsonPropertyName("response_options")]
    public List<string> ResponseOptions { get; set; }
 
    [JsonPropertyName("correct_answer")]
    public string CorrectAnswer { get; set; }
 
    [JsonPropertyName("type_question")]
    public string TypeQuestion { get; set; }
}
отрабатывает без проблем...
0
 Аватар для Nekromio
0 / 0 / 0
Регистрация: 02.04.2019
Сообщений: 69
31.12.2021, 15:16  [ТС]
Цитата Сообщение от Someone007 Посмотреть сообщение
Я заметил. Теперь у меня код
C#
1
2
3
var url = "https://test.tor2.ru/ticket/json1.json";
using var client = new HttpClient();
var obj = await client.GetFromJsonAsync<Rootobject>(url);
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
public class Rootobject
{
    public Ticket[] Tickets { get; set; }
}
 
public class Ticket
{
    public int ticket_id { get; set; }
    public Ticket_Content[] ticket_content { get; set; }
}
 
public class Ticket_Content
{
    [JsonPropertyName("id")]
    public string Id { get; set; }
 
    [JsonPropertyName("question")]
    public string QuestionText { get; set; }
 
    [JsonPropertyName("response_options")]
    public List<string> ResponseOptions { get; set; }
 
    [JsonPropertyName("correct_answer")]
    public string CorrectAnswer { get; set; }
 
    [JsonPropertyName("type_question")]
    public string TypeQuestion { get; set; }
}
отрабатывает без проблем...
Не понятно с чем связано, но у меня пишет System.ArgumentNullException: "Value cannot be null. "
0
2810 / 1679 / 885
Регистрация: 14.04.2015
Сообщений: 5,723
31.12.2021, 17:17
Nekromio, да переустановить уже VS или пересозадайте проект, и не парьте мозг ни себе, ни другим. Если один и тот же код на одном клиенте работает, а на другом нет, то это проблема этого клиента. В чем смысл обмусоливать код в данной ситуации?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
31.12.2021, 17:17

Чтение из файла по URL
Доброе время суток! делаю так: Dim FStreamRead As IO.StreamReader =...

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

Чтение JSON файла
Здравствуйте, имеется следующий по структуре JSON файл: { &quot;results&quot;: Прочитал несколько статей про десериализацию,...

Чтение из файла / json
Хелп, нужна помощь, не могу понять в чем проблема. if (radioButton3.Checked) { string path =...

Чтение json файла
Всем привет , как вытащить данные из json файла вида: {&quot;code&quot;:&quot;code1&quot;,&quot;name&quot;:&quot;nam1&quot;,&quot;Session&quot;:{&quot;CurrentID&quot;:11111111111111111}} ...


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

Или воспользуйтесь поиском по форуму:
28
Ответ Создать тему
Новые блоги и статьи
[golang] Worker Pool
alhaos 09.06.2026
Worker Pool Worker Pool — паттерн конкурентной обработки задач в Go. Суть: фиксированное количество горутин-воркеров читают задачи из общего канала и пишут результаты в общий канал результатов. . . .
[golang] Pipeline
alhaos 08.06.2026
Pipeline Pipeline — паттерн конкурентной обработки данных в Go. Суть: данные проходят через цепочку независимых стадий, каждая из которых работает в своей горутине и общается с соседями через. . .
Свет внутри себя
kumehtar 07.06.2026
Пусть это будет здесь lIs4oanZS9Y
Программа для com-порта
Uhbif79 05.06.2026
Всем привет, давно хотел изучить Qt, начинал, бросал, потом снова начинал. И сейчас вот смог написать свою первую программу. До этого имел опыт программирования микроконтроллеров, писал прошивки на. . .
Транскрипция 55-минутного видео через Whisper: WhisperDesktop облажался, спас Google Colab[
anaschu 01.06.2026
Понадобилось получить текст из свежезагруженного видео на YouTube. Казалось бы, задача на пять минут. Заняла полтора часа. Делюсь опытом — может кому пригодится последовательность решений. . . .
21 мат мед. Планы на развитие модели здравоСохранения
anaschu 01.06.2026
AnyLogic: план развития симуляционной модели рабочего коллектива — динамический абсентеизм, реальные данные, три сценария сравнения Продолжаю серию постов о дискретно-событийной модели рабочего. . .
20. Мат мед. Абсентеизм как отдельный тип простоя
anaschu 29.05.2026
Апдейт модели: исправленные баги, абсентеизм и новые механизмы Продолжаю развивать ранее описанную модель рабочего коллектива на AnyLogic. За последние несколько дней был проведён серьёзный. . .
19. здоровье, усталость и психотип работника влияют на производительность предприятия, и наоборот, производительность на здоровье, усталось и психотип
anaschu 28.05.2026
Дискретно-событийная модель рабочего коллектива на AnyLogic: здоровье, выгорание, психотипы и микростимуляция Привет, коллеги. Хочу поделиться итогами нескольких недель работы над симуляционной. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru