Vajay Attila személyes weboldala

Az XML vagy a JSON jobb az adatcserére?

2018-05-25
>>

Az XML szerkezetét első ránézésre sokan bonyolultnak tartják, túl bőbeszédűnek, szemben a JSON-nel amely kimondottan adatcserére van kitalálva. A JSONShema megjelenésével az XML/XSD páros azt az előnyét is elveszíti, amely a kapott adatok ellenőrizhetőek például egy regex kifejezéssel. Előre megmondhatjuk milyen típusú mezőket várunk, szöveges mezők esetén maszkokat adhatunk vagy szám típusú mezők esetén megmondhatjuk milyen értékek számítanak jónak stb. Mindezt a JSON célirányosan teszi, felesleges adatok nélkül.
Mivel a XML-t sok rendszer használja nem zárható ki használata (ma még), de a tendenciák a JSON erősödését prognosztizálják.

JSON vs. XML

Akit a téma érdekel részletesebben is olvashat ITT.

A PHP-ben történő XML validálásról ITT találhatók információk, a JSONShema-ról pedig ITT.

A JSONShema aktuális szabványát jelenleg draft-07-nek hívják. Több programnyelvhez is készültek implementációk. Erről részletesebb információkat ITT találhatunk.

Például két implementáció PHP-hez:

Példa JSONShemára (draft-7):

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
{
"$schema": "http://json-schema.org/draft-04/schema#",
"definitions":{
"address_type":{
"enum":[
"home",
"mail"
]
}
},
"type": "object",
"properties": {
"partner": {
"type": "array",
"items": [
{
"type": "object",
"properties": {
"name": {
"type": "string",
"pattern": "^.{5,20}$",
"_comment": "min5, max20 hosszú"
},
"address": {
"type": "array",
"items": [
{
"type": "object",
"properties": {
"country": {
"type": "string"
},
"post_code": {
"type": "string"
},
"settlement": {
"type": "string"
},
"street": {
"type": "string"
},
"house_number": {
"type": "string"
},
"type": {
"type": "string"
}
},
"required": [
"country",
"post_code",
"settlement",
"street",
"house_number",
"type"
]
},
{
"type": "object",
"properties": {
"country": {
"type": "string"
},
"post_code": {
"type": "string"
},
"settlement": {
"type": "string"
},
"street": {
"type": "string"
},
"house_number": {
"type": "string"
},
"type": {
"$ref": "#/definitions/address_type"
}
},
"required": [
"country",
"post_code",
"settlement",
"street",
"house_number",
"type"
]
}
]
}
},
"required": [
"name",
"address"
]
}
]
}
},
"required": [
"partner"
]
}

Példa JSON a fenti draft-7 sémára:

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
{
"partner": [
{
"name": "Vajay Attila",
"address": [
{
"country": "Hungary",
"post_code": "1161",
"settlement": "Budapest",
"street": "teszt utca",
"house_number": "12/A fszt.1",
"type": "home"
},
{
"country": "Hungary",
"post_code": "1161",
"settlement": "Budapest",
"street": "teszt utca",
"house_number": "12/A fszt.1",
"type": "mail"
}
]
}
]
}