Skip to content

Commit d6f130e

Browse files
author
mizantrop2397
authored
Merge pull request #281 from art-community/fix/json-parsing
fix json parsing
2 parents c425233 + a840564 commit d6f130e

File tree

2 files changed

+244
-3
lines changed

2 files changed

+244
-3
lines changed

application-json/src/main/java/ru/art/json/descriptor/JsonEntityReader.java

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
import ru.art.entity.*;
2424
import ru.art.json.exception.*;
2525
import static com.fasterxml.jackson.core.JsonToken.*;
26+
import static java.util.Collections.*;
2627
import static java.util.Objects.*;
2728
import static ru.art.core.checker.CheckerForEmptiness.isEmpty;
2829
import static ru.art.core.context.Context.*;
@@ -107,7 +108,6 @@ private static Entity parseJsonEntity(JsonParser parser) throws IOException {
107108
currentName = emptyIfNull(currentName);
108109
switch (currentToken) {
109110
case NOT_AVAILABLE:
110-
case END_ARRAY:
111111
case END_OBJECT:
112112
return entityBuilder.build();
113113
case START_OBJECT:
@@ -143,9 +143,11 @@ private static void parseArray(EntityBuilder entityBuilder, JsonParser parser) t
143143
String currentName = emptyIfNull(parser.getCurrentName());
144144
JsonToken currentToken = parser.nextToken();
145145
switch (currentToken) {
146+
case END_ARRAY:
147+
entityBuilder.valueCollectionField(currentName, emptyList());
148+
return;
146149
case NOT_AVAILABLE:
147150
case END_OBJECT:
148-
case END_ARRAY:
149151
case FIELD_NAME:
150152
case VALUE_EMBEDDED_OBJECT:
151153
case VALUE_NULL:
@@ -272,8 +274,14 @@ private Collection<CollectionValue<Entity>> parseArraysArray(JsonParser parser)
272274
List<CollectionValue<Entity>> array = dynamicArrayOf();
273275
JsonToken currentToken = parser.currentToken();
274276
do {
275-
if (currentToken != START_ARRAY) array.add(entityCollection(parseEntityArray(parser)));
277+
Collection<Entity> entities = dynamicArrayOf();
278+
if (currentToken != START_ARRAY) {
279+
entities = parseEntityArray(parser);
280+
}
276281
currentToken = parser.nextToken();
282+
if (currentToken == END_ARRAY) {
283+
array.add(entityCollection(entities));
284+
}
277285
} while (!parser.isClosed() && currentToken != END_ARRAY);
278286
return array;
279287
}
Lines changed: 233 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,233 @@
1+
package ru.art.test.specification.json
2+
3+
4+
import spock.lang.Specification
5+
6+
import static ru.art.core.constants.StringConstants.*
7+
import static ru.art.json.descriptor.JsonEntityReader.readJson
8+
import static ru.art.json.descriptor.JsonEntityWriter.writeJson
9+
10+
11+
class JsonSpecification extends Specification {
12+
def "should correctly parse/write json"() {
13+
setup:
14+
def json =
15+
"""
16+
{
17+
"result": [
18+
{
19+
"data": [
20+
{
21+
"key": "ÔÈÎ",
22+
"value": "ÞÐÎÂÀ ÀÍÀÑÒÀÑÈß Âß×ÅÑËÀÂÎÂÍÀ"
23+
24+
},
25+
{
26+
"key": "Áàëëàíñ",
27+
"value": "-2084.06"
28+
29+
},
30+
{
31+
"key": "Ëîãèí PPPoE",
32+
"value": "qcnsua6p5u"
33+
34+
}
35+
],
36+
"type": "kv",
37+
"title": "Èíôîðìàöèÿ î êëèåíòå"
38+
},
39+
{
40+
"data": [
41+
[
42+
{
43+
"key": "Èìÿ ñåðâèñà",
44+
"value": "i0011251363"
45+
46+
},
47+
{
48+
"key": "Òèï ñåðâèñà",
49+
"value": "INTERNET"
50+
51+
},
52+
{
53+
"key": "Òàðèôíûé ïëàí",
54+
"value": "[ÐÒÊ] xPON Âñ¸ âìåñòå \\"Äëÿ íà÷àëà\\" ÌÎÍÎ 100Ìáèò/ñ"
55+
56+
},
57+
{
58+
"key": "Ñêîðîñòü ïî òàðèôó [Ìáèò/ñåê]",
59+
"value": "100"
60+
61+
}
62+
]
63+
],
64+
"type": "table",
65+
"title": "Èíôîðìàöèÿ îá óñëóãàõ"
66+
},
67+
{
68+
"data": [
69+
{
70+
"key": "Äàííûå ÒÓ",
71+
"value": "RST-TCN-GIRNOV-PON1-5608-001-013_01-06 [] âîëîêíî âîëîêíî41-48/43"
72+
73+
},
74+
{
75+
"key": "Îáîðóäîâàíèå ÒÓ",
76+
"value": "RST-TCN-GIRNOV-PON1-5608-001-013_01-06"
77+
78+
},
79+
{
80+
"key": "Ïîðò ÒÓ",
81+
"value": "41/48/43"
82+
83+
},
84+
{
85+
"key": "Àâòîðèçîâàí ñ",
86+
"value": "RST-TCN-GIRNOV-PON1-5608 xpon 0/1/0/1:1.1.2000"
87+
88+
},
89+
{
90+
"key": "Îáîðóäîâàíèå ïîñëåäíåé ìèëè",
91+
"value": "RST-TCN-GIRNOV-PON1-5608"
92+
93+
},
94+
{
95+
"key": "Ïîðò ïîñëåäíåé ìèëè",
96+
"value": "0/1/1"
97+
98+
}
99+
],
100+
"type": "kv",
101+
"title": "Òåõíè÷åñêèé ó÷åò"
102+
},
103+
{
104+
"data": [
105+
{
106+
"key": "×èñëî ñåññèé çà ïîñëåäíèé ÷àñ",
107+
"value": "0"
108+
109+
},
110+
{
111+
"key": "×èñëî ñåññèé çà ïîñëåäíèå 3 ÷àñà",
112+
"value": "0"
113+
114+
},
115+
{
116+
"key": "×èñëî ñåññèé çà ïîñëåäíèå ñóòêè",
117+
"value": "3"
118+
119+
},
120+
{
121+
"key": "×èñëî ñåññèé çà ïîñëåäíèå 3-îå ñóòîê",
122+
"value": "3"
123+
124+
}
125+
],
126+
"type": "kv",
127+
"title": "Ñòàòèñòèêà ñåññèé"
128+
},
129+
{
130+
"data": [
131+
{
132+
"key": "Ëîãèí",
133+
"value": "qcnsua6p5u"
134+
135+
},
136+
{
137+
"key": "IP",
138+
"value": "46.61.84.219"
139+
140+
},
141+
{
142+
"key": "Íà÷àëî",
143+
"value": "2020-02-25T08:17:29.000Z"
144+
145+
},
146+
{
147+
"key": "Êîíåö",
148+
"value": "2020-02-28T08:17:30.000Z"
149+
150+
},
151+
{
152+
"key": "Àêòèâíà",
153+
"value": "Íåò",
154+
"estimate": "2"
155+
}
156+
],
157+
"type": "kv",
158+
"title": "Ïîñëåäíÿÿ ñåññèÿ"
159+
},
160+
{
161+
"data": [
162+
{
163+
"key": "Cîñòîÿíèå ïëàòû",
164+
"value": "ðàáîòàåò êîððåêíî",
165+
"estimate": "0"
166+
},
167+
{
168+
"key": "Àäìèíèñòðàòèâíîå ñîñòîÿíèå ïîðòà",
169+
"value": "âêëþ÷åí",
170+
"estimate": "0"
171+
},
172+
{
173+
"key": "Îïåðàòèâíîå ñîñòîÿíèå ïîðòà",
174+
"value": "âêëþ÷åí",
175+
"estimate": "0"
176+
},
177+
{
178+
"key": "Ñòàòóñ ïîäêëþ÷åíèÿ ONT",
179+
"value": "îòêëþ÷åí",
180+
"estimate": "1"
181+
},
182+
{
183+
"key": "Îïèñàíèå",
184+
"value": "auto-add-Mon-Jan-13-12-10-18-202"
185+
},
186+
{
187+
"key": "Äëèíà ëèíèè [km]",
188+
"value": "0"
189+
},
190+
{
191+
"key": "Çàòóõàíèå [dB]",
192+
"value": "0",
193+
"estimate": "0"
194+
},
195+
{
196+
"key": "SN",
197+
"value": "5A544547C8BB20DF (ZTEG-C8BB20DF)"
198+
}
199+
],
200+
"type": "kv",
201+
"title": "Ñîñòîÿíèå ïîðòà"
202+
},
203+
{
204+
"data": [],
205+
"type": "table",
206+
"title": "Òàáëèöà MAC-àäðåñîâ"
207+
},
208+
{
209+
"data": [
210+
[]
211+
],
212+
"type": "table1",
213+
"title": "Ïîðòû ONT"
214+
}
215+
],
216+
"request_id": "6778335",
217+
"conclusions": [
218+
{
219+
"conclusion_text": "Äàííûå ÒÓ ïîëó÷åíû îáîèìè ìåòîäàìè íî íå ðàâíû.",
220+
"conclusion_level": 2,
221+
"conclusion_title": "Òåõíè÷åñêèé ó÷åò"
222+
}
223+
],
224+
"request_created": "2020-05-12T19:43:49+0000"
225+
}"""
226+
when:
227+
def value = readJson(json)
228+
229+
then:
230+
writeJson(value).replaceAll(NEW_LINE, EMPTY_STRING).replaceAll(SPACE, EMPTY_STRING) == json.replaceAll(NEW_LINE, EMPTY_STRING).replaceAll(SPACE, EMPTY_STRING)
231+
}
232+
233+
}

0 commit comments

Comments
 (0)