Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.59/41: Рейтинг темы: голосов - 41, средняя оценка - 4.59
5 / 3 / 1
Регистрация: 31.03.2014
Сообщений: 200

Распарсить json и записать полученные данные в массив

27.03.2015, 15:50. Показов 8157. Ответов 16

Студворк — интернет-сервис помощи студентам
Прочитал статью где такой json
JSON
1
2
3
4
5
6
7
8
9
10
11
12
13
{  
   "firstName": "Иван",  
   "lastName": "Иванов",  
   "address": {  
     "streetAddress": "Московское ш., 101, кв.101",  
     "city": "Ленинград",  
     "postalCode": 101101  
   },  
   "phoneNumbers": [  
     "812 123-1234",  
     "916 123-4567"  
   ]  
 }
Преобразовывается в c# таким образом:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public class Person  
   {  
     public string firstName { get; set; }  
     public string lastName { get; set; }  
     public Address address { get; set; }  
     public string[] phoneNumbers { get; set; }  
     public class Address  
     {  
       public string streetAddress { get; set; }  
       public string city { get; set; }  
       public int postalCode { get; set; }  
     }  
   }  
DataContractJsonSerializer json = new DataContractJsonSerializer(typeof(Person));  
       string fileContent=System.IO.File.ReadAllText("json.txt");  
       Person person = (Person)json.ReadObject(new System.IO.MemoryStream(Encoding.UTF8.GetBytes(fileContent)));
А что если их будет несколько:
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
{
users: [
   {
        firstName: "Иван",
        lastName: "Иванов",
        address: {
             streetAddress: "Московское ш., 101, кв.101",
             city: "Ленинград",
             postalCode: 101101
        },
        phoneNumbers: [
              "812 123-1234",
              "916 123-4567"
        ]
   },
{
        firstName: "Михаил",
        lastName: "Михайлов",
        address: {
             streetAddress: "Московское ш., 201, кв.200",
             city: "Москва",
             postalCode: 201201
        },
        phoneNumbers: [
              "712 123-1234",
              "716 123-4567"
        ]
    }
]
}
Как это конвертировать в массив экземпляров?
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
27.03.2015, 15:50
Ответы с готовыми решениями:

Распарсить строку и записать полученные данные в двумерный массив
необходимо разобрать строку в двумерный массив . строка вида ,]

Распарсить текстовый файл и полученные данные записать в БД Access
Добрый день! Подскажите как организовать следующее: Есть текстовый файл. В нем содержаться персональные данные такие как ФИО, дата...

Как записать полученные данные из json в переменную и работать с ними?
Привет! Подскажите как получить данные в переменную. Есть json фаил { "arr": }

16
Warrior
 Аватар для _exp10der_
500 / 427 / 177
Регистрация: 23.11.2014
Сообщений: 932
27.03.2015, 18:02
Работать лучше через библиотеку JSON.NET http://www.newtonsoft.com/json

Изменить исходник нужно
Как лучше парсить, из xml или json?
Исключение при парсинге JArray
JSON.NET - получить данные со страницы Вк
1
5 / 3 / 1
Регистрация: 31.03.2014
Сообщений: 200
27.03.2015, 18:35  [ТС]
_exp10der_, Читал про неё, но перед тем как пользоваться сторонними библиотеками хотелось бы поэкспериментировать с родными. Кто знает как с помощью класса DataContractJsonSerializer организовать массив экземпляров из массива json?
0
Warrior
 Аватар для _exp10der_
500 / 427 / 177
Регистрация: 23.11.2014
Сообщений: 932
27.03.2015, 18:47
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
70
71
72
73
74
75
76
77
78
79
80
81
82
83
using System.Collections.Generic;
using Newtonsoft.Json;
 
class Program
{
    private static void Main(string[] args)
    {
        string s = @"
 
{
 
    'users': [
 
        {
 
            'firstName': 'Иван',
 
            'lastName': 'Иванов',
 
            'address': {
 
                'streetAddress': 'Московское ш., 101, кв.101',
 
                'city': 'Ленинград',
 
                'postalCode': 101101
 
            },
 
            'phoneNumbers': []
 
        },
 
        {
 
            'firstName': 'Михаил',
 
            'lastName': 'Михайлов',
 
            'address': {
 
                'streetAddress': 'Московское ш., 201, кв.200',
 
                'city': 'Москва',
 
                'postalCode': 201201
 
            },
 
            'phoneNumbers': [
 
                '712 123-1234',
 
                '716 123-4567'
 
            ]
 
        }
 
    ]
 
}
 
";
 
        var json = JsonConvert.DeserializeObject<Foo>(s);
    }
}
 
 
class Foo
{
    public List<User> Users { get; set; }
}
 
 
class User
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public Dictionary<string, string> Address { get; set; }
    public List<string> phoneNumbers { get; set; }
}

Вот на скорую руку
upd:
А вам надо стандартной ну мб кто то поможет еще...
1
5 / 3 / 1
Регистрация: 31.03.2014
Сообщений: 200
27.03.2015, 18:49  [ТС]
_exp10der_, спасибо, но всё же повторюсь что не хотелось бы использовать сторонние библиотеки
0
Warrior
 Аватар для _exp10der_
500 / 427 / 177
Регистрация: 23.11.2014
Сообщений: 932
27.03.2015, 19:23
Лучший ответ Сообщение было отмечено newbiecoderr как решение

Решение

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
using System.Collections.Generic;
using System.IO;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Json;
using System.Text;
 
 
class Program
{
    private static void Main(string[] args)
    {
 
        DataContractJsonSerializer json1 = new DataContractJsonSerializer(typeof(Foo));
        string fileContent = File.ReadAllText("zzz.txt", Encoding.Default);
 
        Foo person = (Foo)json1.ReadObject(new MemoryStream(Encoding.UTF8.GetBytes(fileContent)));
 
 
        // Foo person = (Foo) json1.ReadObject(GenerateStreamFromString(s));
 
 
 
    }
    static public Stream GenerateStreamFromString(string s)
    {
        MemoryStream stream = new MemoryStream();
        StreamWriter writer = new StreamWriter(stream);
        writer.Write(s);
        writer.Flush();
        stream.Position = 0;
        return stream;
    }
}
 
[DataContract]
class Foo
{
    [DataMember]
    public List<User> users { get; set; }
}
 
[DataContract]
class User
{
    [DataMember]
    public string firstName { get; set; }
    [DataMember]
    public string lastName { get; set; }
    //[DataMember(Name = "address")]
    //public Dictionary<string, string> address { get; set; }
    [DataMember(Name = "address")]
    public Address address { get; set; }
    [DataMember]
    public List<string> phoneNumbers { get; set; }
}
[DataContract]
class Address
{
    [DataMember]
    public string streetAddress { get; set; }
    [DataMember]
    public string city { get; set; }
    [DataMember]
    public int postalCode { get; set; }
}
Вот стандартной
Ужас одним словом
Никогда ей не пользовался ну вроде работает
Вложения
Тип файла: txt zzz.txt (778 байт, 18 просмотров)
2
5 / 3 / 1
Регистрация: 31.03.2014
Сообщений: 200
27.03.2015, 22:32  [ТС]
_exp10der_, А если допустим мне не нужны некоторые данные из json, например lastName, как мне поступить? Можно ли не создавать переменную в классе?
0
Warrior
 Аватар для _exp10der_
500 / 427 / 177
Регистрация: 23.11.2014
Сообщений: 932
27.03.2015, 23:49
Что мешает самому то проверить? Выпилите все лишнее...

Добавлено через 1 минуту
https://msdn.microsoft.com/ru-... .110).aspx
1
5 / 3 / 1
Регистрация: 31.03.2014
Сообщений: 200
27.03.2015, 23:50  [ТС]
_exp10der_, я пробовал не создавать переменную, вроде всё нормально ошибок нет, но хотел убедиться что это правильно
А в ссылке вроде нет ответа по моему вопросу.
Что вы имелли ввиду
Цитата Сообщение от _exp10der_ Посмотреть сообщение
Выпилите все лишнее...
0
Warrior
 Аватар для _exp10der_
500 / 427 / 177
Регистрация: 23.11.2014
Сообщений: 932
28.03.2015, 00:00
Ну для этого и используют обычно json.net что бы не строить свои классы и юзают linq это очень удобно. Посмотрите сылки во 2 посте плюс куча примеров в интернете. У этой библиотеки хорошая документация.

Добавлено через 2 минуты
Я имел ввиду то что вам не нужно например lastname
1
5 / 3 / 1
Регистрация: 31.03.2014
Сообщений: 200
18.04.2015, 09:23  [ТС]
Цитата Сообщение от _exp10der_ Посмотреть сообщение
public List<User> users
Читал про списки, там они объявляются только с помощью ключевого слова new вроде этого: List<User> = new List<User>();
А почему тут такого нет, и как это работает?
0
Warrior
 Аватар для _exp10der_
500 / 427 / 177
Регистрация: 23.11.2014
Сообщений: 932
18.04.2015, 13:27
C#
1
public List<User> users
так это просто переменная

C#
1
public List<User> users = new List<User>();
а тут уже инициализация

Странные у вас вопросы при этом вы лезите в json, когда вам надо читать про переменные...
0
5 / 3 / 1
Регистрация: 31.03.2014
Сообщений: 200
20.04.2015, 12:50  [ТС]
Цитата Сообщение от _exp10der_ Посмотреть сообщение
вам надо читать про переменные
в тексте про переменные ничего не сказано про такую конструкцию
C#
1
public List<User> users
0
Warrior
 Аватар для _exp10der_
500 / 427 / 177
Регистрация: 23.11.2014
Сообщений: 932
20.04.2015, 16:24
Все там сказанно например int i
Сначало идет тип потом название переменной тут тоже самое
Тип list<User> потом название переменной users
0
35 / 35 / 15
Регистрация: 06.01.2014
Сообщений: 707
22.09.2016, 20:52
Подскажите, если в атрибуте есть двоеточие, то как это "чудо" парсить?
JavaScript
1
2
3
4
5
6
7
8
9
'address': {
 
                'streetAddress:word': 'Московское ш., 201, кв.200',
 
                'city': 'Москва',
 
                'postalCode': 201201
 
            },
0
 Аватар для Пaтрик
442 / 410 / 132
Регистрация: 21.01.2012
Сообщений: 976
22.09.2016, 22:02
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
using Newtonsoft.Json;
using System;
 
namespace Thread1405555
{
    public class SomeShit
    {
        [JsonProperty("streetAddress:word")]
        public string StreetAddress { get; set; }
 
        [JsonProperty("city")]
        public string City { get; set; }
 
        [JsonProperty("postalCode")]
        public int PostalCode { get; set; }
    }
 
    public class Program
    {
        public static void Main(string[] args)
        {
            var shit = JsonConvert.DeserializeObject<SomeShit>(@"{
                'streetAddress:word': 'Московское ш., 201, кв.200',
                'city': 'Москва',
                'postalCode': 201201
            }");
            Console.WriteLine(shit.StreetAddress);
            Console.ReadLine();
        }
    }
}
0
0 / 0 / 0
Регистрация: 05.02.2018
Сообщений: 10
18.02.2018, 14:56
Цитата Сообщение от Randen Посмотреть сообщение
Подскажите, если в атрибуте есть двоеточие, то как это "чудо" парсить?
Перед двоеточием ставьте слэш /(такой вот)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
18.02.2018, 14:56
Помогаю со студенческими работами здесь

Полученные данные из бд (4000 строк) необходимо записать в массив
SCommand.CommandText = &quot;SELECT _Description FROM dbo._Reference115 WHERE _Description != '' ORDER BY _Code&quot;; через foreach может быть ?...

Распарсить строку и записать данные в массив
Как строку {оваться,у{йся,йтесь},у{юсь,ешься,ется,емся,етесь,ются,ясь},ова{лся,лась,лось,лись}} преобразовать в такой массив: ...

Как распарсить данные из первого json-а и перекинуть их в другой json
Добрый день, столкнулся с такой задачей. Есть вот такой json Необходимо извлечь некоторые данные, провести некоторые...

Распарсить Html-файл, полученные данные поместить в таблицу
Здравствуйте друзья. Как можно парсить html файл (локально находящийся на диске) именно мне надо спарсить таблицу и то что в ней...

Записать данные в JSON-массив
Здравствуйте. Интересует следующее. Можно ли как то в массив JSON заносить данные не корректирую сам файл, а с помощью каких-то...


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

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Новые блоги и статьи
Как дизайн сайта влияет на конверсию: 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 На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru