Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/15: Рейтинг темы: голосов - 15, средняя оценка - 4.80
Заклинатель змей
705 / 560 / 219
Регистрация: 30.04.2016
Сообщений: 2,606
1
.NET 4.x

Парсинг JSON с short.pub посредством NewtonSoft.Json

03.09.2018, 22:25. Показов 3108. Ответов 8

Author24 — интернет-сервис помощи студентам
Доброго времени суток.
Имеется сокращалка сайтов short.pub, у которой есть API, который возвращает JSON, содержащий сокращённые ссылки такого формата
Javascript
1
{"response":{"id":"2683769","orig":"https:\/\/m.vk.com\/","short":"http:\/\/short.pub\/2683769","shorts":["http:\/\/link.pub\/2683769","http:\/\/short.pub\/2683769"],"qr":"http:\/\/short.pub\/qr\/2683769.png","sub":[],"clicks":0}}
Собственно, вопросы:
1. Как распарсить это чудо, желательно с использованием NetownSoft Json?;
2. Не помешают ли эти странные символы "\/\/" парсингу? Так понимаю, это способ записи "//" после https:
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
03.09.2018, 22:25
Ответы с готовыми решениями:

[Newtonsoft.Json] Парсинг JSON-ответа
Здравствуйте уважаемые участники сообщества "CyberForum" ! У меня возникла небольшая проблема. Я...

Парсинг c Newtonsoft.Json
Хотел попробовать распарсить json с динамическими объектами Но честно говоря вообще не получилось...

Null reference при десерелизации JSON (Newtonsoft.Json)
Задача: достать из JSON ответа Название фирмы. Использую библиотеку Newtonsoft.Json. Сам код:...

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

8
Эксперт .NET
6508 / 4085 / 1605
Регистрация: 09.05.2015
Сообщений: 9,551
03.09.2018, 22:31 2
Лучший ответ Сообщение было отмечено DobroAlex как решение

Решение

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
    public class Rootobject
    {
        public Response response { get; set; }
    }
 
    public class Response
    {
        public string id { get; set; }
        public string orig { get; set; }
        public string @short { get; set; }
        public string[] shorts { get; set; }
        public string qr { get; set; }
        public object[] sub { get; set; }
        public int clicks { get; set; }
    }
C#
1
var obj = JsonConvert.DeserializeObject<Rootobject>(json));
0
Заклинатель змей
705 / 560 / 219
Регистрация: 30.04.2016
Сообщений: 2,606
03.09.2018, 22:34  [ТС] 3
Someone007, написал почти такой же сурс, за исключением 13 строки. Спасибо за такой оперативный ответ, снимаю шляпу
0
Заклинатель змей
705 / 560 / 219
Регистрация: 30.04.2016
Сообщений: 2,606
04.09.2018, 15:52  [ТС] 4
Someone007, этот код бросал исключение при попытке доступа к эл-там sub
Исправил земной
C#
1
public object[] sub
на
C#
1
public   Dictonary<string,string> sub
0
Эксперт .NET
6508 / 4085 / 1605
Регистрация: 09.05.2015
Сообщений: 9,551
04.09.2018, 15:54 5
Цитата Сообщение от DobroAlex Посмотреть сообщение
этот код бросал исключение при попытке доступа к эл-там sub
У вас в примере там было пусто, поэтому тип подобрать невозможно.
0
1 / 1 / 0
Регистрация: 08.03.2013
Сообщений: 114
11.04.2019, 12:30 6
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
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
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
[
  
  {
    "RecType": "Fact",
    "LMSZID": "4a382da4-6075-4500-8671-fc327c640275",
    "categoryID": "efd64fa2-cda9-45a7-90a1-bcfd600a03ff",
    "ONMSZCode": 2472.000001,
    "SNILS_recip": 11111111111,
    "FamilyName_recip": "Григорьева1",
    "Name_recip": "Нина",
    "Patronymic_recip": "Степановна",
    "Gender_recip": "Ж",
    "BirthDate_recip": "01.01.1935",
    "doctype_recip": 7,
    "doc_Series_recip": "Q-0.А",
    "doc_Number_recip": 0,
    "doc_IssueDate_recip": "06.08.2003",
    "doc_Issuer_recip": "Котельниковским о-м Люберецкого УВД МО",
    "SNILS_reason": "",
    "FamilyName_reason": "",
    "Name_reason": "",
    "Patronymic_reason": "",
    "Gender_reason": "",
    "BirthDate_reason": "",
    "doctype_reason": "",
    "doc_Series_reason": "",
    "doc_Number_reason": "",
    "doc_IssueDate_reason": "",
    "doc_Issuer_reason": "",
    "decision_date": "01.01.2018",
    "dateStart": "01.01.2018",
    "dateFinish": "01.06.2018",
    "usingSign": "Нет",
    "criteria": "",
    "FormCode": 1,
    "amount": "81,14",
    "measuryCode": 1,
    "monetization": "Нет",
    "content": "",
    "comment": "",
    "equivalentAmount": ""
  },
  {
    "RecType": "Fact",
    "LMSZID": "4a382da4-6075-4500-8671-fc327c640275",
    "categoryID": "efd64fa2-cda9-45a7-90a1-bcfd600a03ff",
    "ONMSZCode": 2472.000001,
    "SNILS_recip": 11111111111,
    "FamilyName_recip": "Григорьева2",
    "Name_recip": "Нина",
    "Patronymic_recip": "Степановна",
    "Gender_recip": "Ж",
    "BirthDate_recip": "01.01.1935",
    "doctype_recip": 7,
    "doc_Series_recip": "Q-0.А",
    "doc_Number_recip": 0,
    "doc_IssueDate_recip": "06.08.2003",
    "doc_Issuer_recip": "Котельниковским о-м Люберецкого УВД МО",
    "SNILS_reason": "",
    "FamilyName_reason": "",
    "Name_reason": "",
    "Patronymic_reason": "",
    "Gender_reason": "",
    "BirthDate_reason": "",
    "doctype_reason": "",
    "doc_Series_reason": "",
    "doc_Number_reason": "",
    "doc_IssueDate_reason": "",
    "doc_Issuer_reason": "",
    "decision_date": "01.01.2018",
    "dateStart": "01.01.2018",
    "dateFinish": "01.06.2018",
    "usingSign": "Нет",
    "criteria": "",
    "FormCode": 1,
    "amount": "81,14",
    "measuryCode": 1,
    "monetization": "Нет",
    "content": "",
    "comment": "",
    "equivalentAmount": ""
  },
  {
    "RecType": "Fact",
    "LMSZID": "4a382da4-6075-4500-8671-fc327c640275",
    "categoryID": "efd64fa2-cda9-45a7-90a1-bcfd600a03ff",
    "ONMSZCode": 2472.000001,
    "SNILS_recip": 11111111111,
    "FamilyName_recip": "Григорьева3",
    "Name_recip": "Нина",
    "Patronymic_recip": "Степановна",
    "Gender_recip": "Ж",
    "BirthDate_recip": "01.01.1935",
    "doctype_recip": 7,
    "doc_Series_recip": "Q-0.А",
    "doc_Number_recip": 0,
    "doc_IssueDate_recip": "06.08.2003",
    "doc_Issuer_recip": "Котельниковским о-м Люберецкого УВД МО",
    "SNILS_reason": "",
    "FamilyName_reason": "",
    "Name_reason": "",
    "Patronymic_reason": "",
    "Gender_reason": "",
    "BirthDate_reason": "",
    "doctype_reason": "",
    "doc_Series_reason": "",
    "doc_Number_reason": "",
    "doc_IssueDate_reason": "",
    "doc_Issuer_reason": "",
    "decision_date": "01.01.2018",
    "dateStart": "01.01.2018",
    "dateFinish": "01.06.2018",
    "usingSign": "Нет",
    "criteria": "",
    "FormCode": 1,
    "amount": "81,14",
    "measuryCode": 1,
    "monetization": "Нет",
    "content": "",
    "comment": "",
    "equivalentAmount": ""
  },
  {
    "RecType": "Fact",
    "LMSZID": "4a382da4-6075-4500-8671-fc327c640275",
    "categoryID": "efd64fa2-cda9-45a7-90a1-bcfd600a03ff",
    "ONMSZCode": 2472.000001,
    "SNILS_recip": 11111111111,
    "FamilyName_recip": "Григорьева4",
    "Name_recip": "Нина",
    "Patronymic_recip": "Степановна",
    "Gender_recip": "Ж",
    "BirthDate_recip": "01.01.1935",
    "doctype_recip": 7,
    "doc_Series_recip": "Q-0.А",
    "doc_Number_recip": 0,
    "doc_IssueDate_recip": "06.08.2003",
    "doc_Issuer_recip": "Котельниковским о-м Люберецкого УВД МО",
    "SNILS_reason": "",
    "FamilyName_reason": "",
    "Name_reason": "",
    "Patronymic_reason": "",
    "Gender_reason": "",
    "BirthDate_reason": "",
    "doctype_reason": "",
    "doc_Series_reason": "",
    "doc_Number_reason": "",
    "doc_IssueDate_reason": "",
    "doc_Issuer_reason": "",
    "decision_date": "01.01.2018",
    "dateStart": "01.01.2018",
    "dateFinish": "01.06.2018",
    "usingSign": "Нет",
    "criteria": "",
    "FormCode": 1,
    "amount": "81,14",
    "measuryCode": 1,
    "monetization": "Нет",
    "content": "",
    "comment": "",
    "equivalentAmount": ""
  }
]
Сформировал класс Item:
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
public class Item
    {
        public string RecType { get; set; }
        public string LMSZID { get; set; }
        public string categoryID { get; set; }
        public string ONMSZCode { get; set; }
        public object SNILS_recip { get; set; }
        public string FamilyName_recip { get; set; }
        public string Name_recip { get; set; }
        public string Patronymic_recip { get; set; }
        public string Gender_recip { get; set; }
        public string BirthDate_recip { get; set; }
        public int doctype_recip { get; set; }
        public string doc_Series_recip { get; set; }
        public int doc_Number_recip { get; set; }
        public string doc_IssueDate_recip { get; set; }
        public string doc_Issuer_recip { get; set; }
        public string SNILS_reason { get; set; }
        public string FamilyName_reason { get; set; }
        public string Name_reason { get; set; }
        public string Patronymic_reason { get; set; }
        public string Gender_reason { get; set; }
        public string BirthDate_reason { get; set; }
        public string doctype_reason { get; set; }
        public string doc_Series_reason { get; set; }
        public string doc_Number_reason { get; set; }
        public string doc_IssueDate_reason { get; set; }
        public string doc_Issuer_reason { get; set; }
        public string decision_date { get; set; }
        public string dateStart { get; set; }
        public string dateFinish { get; set; }
        public string usingSign { get; set; }
        public string criteria { get; set; }
        public int FormCode { get; set; }
        public string amount { get; set; }
        public int measuryCode { get; set; }
        public string monetization { get; set; }
        public string content { get; set; }
        public string comment { get; set; }
        public string equivalentAmount { get; set; }
    }
При попытке десериализации - бъет ошибку:
C#
1
2
3
4
5
6
internal static T Deserialize<T>(string fileName)
        {
            string json = File.ReadAllText(fileName);
            T res = JsonConvert.DeserializeObject<T>(json.Substring(1, json.Length - 2));
            return res;
        }
Разбираться пробовал по статье на ответ Oxoron.
0
Модератор
Эксперт .NET
15806 / 10961 / 2845
Регистрация: 21.04.2018
Сообщений: 32,171
Записей в блоге: 2
11.04.2019, 14:02 7
defond57, старую тему, тем более с отмеченным решением, мало кто будет читать.
Мой совет - создайте новую и разъясните подробнее - что за ошибка (конкретно её текст).

Добавлено через 1 минуту
На вскидку - некоторые свойства неверного типа.
0
1 / 1 / 0
Регистрация: 08.03.2013
Сообщений: 114
11.04.2019, 14:08 8
Не хочется засирать сайт однотипными вопросами. Да и больше интересует. почему не работает именно указанный пример. А сам парсинг я уже сделал, но не так как в примере.

Поэтому мне кажется нет смысла делать новый вопрос. Если кто-то ответит - отлично, если нет, ну значит не судьба.

-------

Ну хз - я всё перелопатил и не вижу ошибку. Тем более если решать немного другим примером - всё решается вообще без проблем.

Вот пример работающего кода.

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
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
using System;
using Newtonsoft.Json;  
using System.Collections.Generic;
public class Program
{
    public static void Main()
    {
        var json = @"[
  
  {
    'RecType': 'Fact',
    'LMSZID': '4a382da4-6075-4500-8671-fc327c640275',
    'categoryID': 'efd64fa2-cda9-45a7-90a1-bcfd600a03ff',
    'ONMSZCode': 2472.000001,
    'SNILS_recip': 11111111111,
    'FamilyName_recip': 'Григорьева1',
    'Name_recip': 'Нина',
    'Patronymic_recip': 'Степановна',
    'Gender_recip': 'Ж',
    'BirthDate_recip': '01.01.1935',
    'doctype_recip': 7,
    'doc_Series_recip': 'Q-0.А',
    'doc_Number_recip': 0,
    'doc_IssueDate_recip': '06.08.2003',
    'doc_Issuer_recip': 'Котельниковским о-м Люберецкого УВД МО',
    'SNILS_reason': '',
    'FamilyName_reason': '',
    'Name_reason': '',
    'Patronymic_reason': '',
    'Gender_reason': '',
    'BirthDate_reason': '',
    'doctype_reason': '',
    'doc_Series_reason': '',
    'doc_Number_reason': '',
    'doc_IssueDate_reason': '',
    'doc_Issuer_reason': '',
    'decision_date': '01.01.2018',
    'dateStart': '01.01.2018',
    'dateFinish': '01.06.2018',
    'usingSign': 'Нет',
    'criteria': '',
    'FormCode': 1,
    'amount': '81,14',
    'measuryCode': 1,
    'monetization': 'Нет',
    'content': '',
    'comment': '',
    'equivalentAmount': ''
  },
  {
    'RecType': 'Fact',
    'LMSZID': '4a382da4-6075-4500-8671-fc327c640275',
    'categoryID': 'efd64fa2-cda9-45a7-90a1-bcfd600a03ff',
    'ONMSZCode': 2472.000001,
    'SNILS_recip': 11111111111,
    'FamilyName_recip': 'Григорьева2',
    'Name_recip': 'Нина',
    'Patronymic_recip': 'Степановна',
    'Gender_recip': 'Ж',
    'BirthDate_recip': '01.01.1935',
    'doctype_recip': 7,
    'doc_Series_recip': 'Q-0.А',
    'doc_Number_recip': 0,
    'doc_IssueDate_recip': '06.08.2003',
    'doc_Issuer_recip': 'Котельниковским о-м Люберецкого УВД МО',
    'SNILS_reason': '',
    'FamilyName_reason': '',
    'Name_reason': '',
    'Patronymic_reason': '',
    'Gender_reason': '',
    'BirthDate_reason': '',
    'doctype_reason': '',
    'doc_Series_reason': '',
    'doc_Number_reason': '',
    'doc_IssueDate_reason': '',
    'doc_Issuer_reason': '',
    'decision_date': '01.01.2018',
    'dateStart': '01.01.2018',
    'dateFinish': '01.06.2018',
    'usingSign': 'Нет',
    'criteria': '',
    'FormCode': 1,
    'amount': '81,14',
    'measuryCode': 1,
    'monetization': 'Нет',
    'content': '',
    'comment': '',
    'equivalentAmount': ''
  },
  {
    'RecType': 'Fact',
    'LMSZID': '4a382da4-6075-4500-8671-fc327c640275',
    'categoryID': 'efd64fa2-cda9-45a7-90a1-bcfd600a03ff',
    'ONMSZCode': 2472.000001,
    'SNILS_recip': 11111111111,
    'FamilyName_recip': 'Григорьева3',
    'Name_recip': 'Нина',
    'Patronymic_recip': 'Степановна',
    'Gender_recip': 'Ж',
    'BirthDate_recip': '01.01.1935',
    'doctype_recip': 7,
    'doc_Series_recip': 'Q-0.А',
    'doc_Number_recip': 0,
    'doc_IssueDate_recip': '06.08.2003',
    'doc_Issuer_recip': 'Котельниковским о-м Люберецкого УВД МО',
    'SNILS_reason': '',
    'FamilyName_reason': '',
    'Name_reason': '',
    'Patronymic_reason': '',
    'Gender_reason': '',
    'BirthDate_reason': '',
    'doctype_reason': '',
    'doc_Series_reason': '',
    'doc_Number_reason': '',
    'doc_IssueDate_reason': '',
    'doc_Issuer_reason': '',
    'decision_date': '01.01.2018',
    'dateStart': '01.01.2018',
    'dateFinish': '01.06.2018',
    'usingSign': 'Нет',
    'criteria': '',
    'FormCode': 1,
    'amount': '81,14',
    'measuryCode': 1,
    'monetization': 'Нет',
    'content': '',
    'comment': '',
    'equivalentAmount': ''
  },
  {
    'RecType': 'Fact',
    'LMSZID': '4a382da4-6075-4500-8671-fc327c640275',
    'categoryID': 'efd64fa2-cda9-45a7-90a1-bcfd600a03ff',
    'ONMSZCode': 2472.000001,
    'SNILS_recip': 11111111111,
    'FamilyName_recip': 'Григорьева4',
    'Name_recip': 'Нина',
    'Patronymic_recip': 'Степановна',
    'Gender_recip': 'Ж',
    'BirthDate_recip': '01.01.1935',
    'doctype_recip': 7,
    'doc_Series_recip': 'Q-0.А',
    'doc_Number_recip': 0,
    'doc_IssueDate_recip': '06.08.2003',
    'doc_Issuer_recip': 'Котельниковским о-м Люберецкого УВД МО',
    'SNILS_reason': '',
    'FamilyName_reason': '',
    'Name_reason': '',
    'Patronymic_reason': '',
    'Gender_reason': '',
    'BirthDate_reason': '',
    'doctype_reason': '',
    'doc_Series_reason': '',
    'doc_Number_reason': '',
    'doc_IssueDate_reason': '',
    'doc_Issuer_reason': '',
    'decision_date': '01.01.2018',
    'dateStart': '01.01.2018',
    'dateFinish': '01.06.2018',
    'usingSign': 'Нет',
    'criteria': '',
    'FormCode': 1,
    'amount': '81,14',
    'measuryCode': 1,
    'monetization': 'Нет',
    'content': '',
    'comment': '',
    'equivalentAmount': ''
  }
]";
        var m = JsonConvert.DeserializeObject<List<Class1>>(json);
        Console.WriteLine(m[0].doc_Issuer_recip);
        Console.WriteLine(m[0].FamilyName_recip);
        Console.WriteLine(m[0].ONMSZCode);
    }
}
 
 
public class Class1
{
    public string RecType { get; set; }
    public string LMSZID { get; set; }
    public string categoryID { get; set; }
    public string ONMSZCode { get; set; }
    public long SNILS_recip { get; set; }
    public string FamilyName_recip { get; set; }
    public string Name_recip { get; set; }
    public string Patronymic_recip { get; set; }
    public string Gender_recip { get; set; }
    public string BirthDate_recip { get; set; }
    public int doctype_recip { get; set; }
    public string doc_Series_recip { get; set; }
    public int doc_Number_recip { get; set; }
    public string doc_IssueDate_recip { get; set; }
    public string doc_Issuer_recip { get; set; }
    public string SNILS_reason { get; set; }
    public string FamilyName_reason { get; set; }
    public string Name_reason { get; set; }
    public string Patronymic_reason { get; set; }
    public string Gender_reason { get; set; }
    public string BirthDate_reason { get; set; }
    public string doctype_reason { get; set; }
    public string doc_Series_reason { get; set; }
    public string doc_Number_reason { get; set; }
    public string doc_IssueDate_reason { get; set; }
    public string doc_Issuer_reason { get; set; }
    public string decision_date { get; set; }
    public string dateStart { get; set; }
    public string dateFinish { get; set; }
    public string usingSign { get; set; }
    public string criteria { get; set; }
    public int FormCode { get; set; }
    public string amount { get; set; }
    public int measuryCode { get; set; }
    public string monetization { get; set; }
    public string content { get; set; }
    public string comment { get; set; }
    public string equivalentAmount { get; set; }
}
Добавлено через 3 минуты
Может библиотека не может файл прочитать из-за квадратных скобок... Но без них же не вариант. В общем уже ничего не понимаю.
0
Модератор
Эксперт .NET
15806 / 10961 / 2845
Регистрация: 21.04.2018
Сообщений: 32,171
Записей в блоге: 2
11.04.2019, 14:17 9
Цитата Сообщение от defond57 Посмотреть сообщение
Не хочется засирать сайт однотипными вопросами. Да и больше интересует. почему не работает именно указанный пример.
Но Вам же хочется получить ответ?
Старые темы, особенно с отмеченным решением, почти никто не читает.
0
11.04.2019, 14:17
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
11.04.2019, 14:17
Помогаю со студенческими работами здесь

Разбор JSON, используя Newtonsoft.Json
Добрый день! Подскажите пожалуйста, как десериализовать JSON-ответ следующего вида {&quot;result&quot;:...

Обработка JSON через Newtonsoft.JSON
Всем привет. Частично умею работать с этой либой, но возник вопрос как получить данные из такого...

Newtonsoft Json
Всем привет! у меня есть пример Json формата...

Как подключить Newtonsoft.Json?
Хотел попробовать Json, добавил using Newtonsoft.Json;, но добавление высветилось красным. Что...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru