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

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

27.03.2015, 15:50. Показов 5811. Ответов 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)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
27.03.2015, 15:50
Ответы с готовыми решениями:

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

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

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

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

__________________

Записывайтесь на профессиональные курсы С#-разработчиков‌
16
Warrior
497 / 424 / 177
Регистрация: 23.11.2014
Сообщений: 932
27.03.2015, 18:02 2
Работать лучше через библиотеку 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  [ТС] 3
_exp10der_, Читал про неё, но перед тем как пользоваться сторонними библиотеками хотелось бы поэкспериментировать с родными. Кто знает как с помощью класса DataContractJsonSerializer организовать массив экземпляров из массива json?
0
Warrior
497 / 424 / 177
Регистрация: 23.11.2014
Сообщений: 932
27.03.2015, 18:47 4
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  [ТС] 5
_exp10der_, спасибо, но всё же повторюсь что не хотелось бы использовать сторонние библиотеки
0
Warrior
497 / 424 / 177
Регистрация: 23.11.2014
Сообщений: 932
27.03.2015, 19:23 6
Лучший ответ Сообщение было отмечено 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; }
}
Вот стандартной
Ужас одним словом
Никогда ей не пользовался ну вроде работает
2
Вложения
Тип файла: txt zzz.txt (778 байт, 18 просмотров)
5 / 3 / 1
Регистрация: 31.03.2014
Сообщений: 200
27.03.2015, 22:32  [ТС] 7
_exp10der_, А если допустим мне не нужны некоторые данные из json, например lastName, как мне поступить? Можно ли не создавать переменную в классе?
0
Warrior
497 / 424 / 177
Регистрация: 23.11.2014
Сообщений: 932
27.03.2015, 23:49 8
Что мешает самому то проверить? Выпилите все лишнее...

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

Добавлено через 2 минуты
Я имел ввиду то что вам не нужно например lastname
1
5 / 3 / 1
Регистрация: 31.03.2014
Сообщений: 200
18.04.2015, 09:23  [ТС] 11
Цитата Сообщение от _exp10der_ Посмотреть сообщение
public List<User> users
Читал про списки, там они объявляются только с помощью ключевого слова new вроде этого: List<User> = new List<User>();
А почему тут такого нет, и как это работает?
0
Warrior
497 / 424 / 177
Регистрация: 23.11.2014
Сообщений: 932
18.04.2015, 13:27 12
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  [ТС] 13
Цитата Сообщение от _exp10der_ Посмотреть сообщение
вам надо читать про переменные
в тексте про переменные ничего не сказано про такую конструкцию
C#
1
public List<User> users
0
Warrior
497 / 424 / 177
Регистрация: 23.11.2014
Сообщений: 932
20.04.2015, 16:24 14
Все там сказанно например int i
Сначало идет тип потом название переменной тут тоже самое
Тип list<User> потом название переменной users
0
35 / 35 / 15
Регистрация: 06.01.2014
Сообщений: 707
22.09.2016, 20:52 15
Подскажите, если в атрибуте есть двоеточие, то как это "чудо" парсить?
Javascript
1
2
3
4
5
6
7
8
9
'address': {
 
                'streetAddress:word': 'Московское ш., 201, кв.200',
 
                'city': 'Москва',
 
                'postalCode': 201201
 
            },
0
438 / 406 / 132
Регистрация: 21.01.2012
Сообщений: 974
22.09.2016, 22:02 16
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 17
Цитата Сообщение от Randen Посмотреть сообщение
Подскажите, если в атрибуте есть двоеточие, то как это "чудо" парсить?
Перед двоеточием ставьте слэш /(такой вот)
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
18.02.2018, 14:56

Заказываю контрольные, курсовые, дипломные работы и диссертации здесь.

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.