Π Π°Π·Π½ΠΎΠ΅

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ массив json: JSON — ΠœΠ°ΡΡΠΈΠ²Ρ‹

Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠ°Π½ΠΈΠ΅

JSON — ΠœΠ°ΡΡΠΈΠ²Ρ‹

ΠœΠ°ΡΡΠΈΠ²Ρ‹ Π² JSON ΠΏΠΎΡ‡Ρ‚ΠΈ Ρ‚ΠΎ ΠΆΠ΅ самоС, Ρ‡Ρ‚ΠΎ массивы Π² JavaScript.

Π’ JSON элСмСнтами массива ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ строки, числа, ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, массивы, boolean ΠΈΠ»ΠΈ null.

Π’ JavaScript элСмСнтами массива ΠΊΡ€ΠΎΠΌΠ΅ пСрСчислСнных Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ допустимыС выраТСния JavaScript, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π΄Π°Ρ‚Ρ‹ ΠΈ undefined.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€:


[ "Ford", "BMW", "Fiat" ] 

ΠœΠ°ΡΡΠΈΠ²Ρ‹ Π² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°Ρ… JSON

ΠœΠ°ΡΡΠΈΠ²Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ значСниями свойств ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ²:


{
   "name":"John",
   "age":30,
   "cars":[ "Ford", "BMW", "Fiat" ]
} 

Доступ ΠΊ значСниям массива

ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ ΠΊ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ элСмСнта массива ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ Π½ΠΎΠΌΠ΅Ρ€Π° Π΅Π³ΠΎ индСкса:


x = myObj.cars[0];

ΠžΠ±Ρ…ΠΎΠ΄ элСмСнтов массива

ΠŸΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΎΠ±ΠΎΠΉΡ‚ΠΈ всС элСмСнты массива ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ Ρ†ΠΈΠΊΠ»Π° for-in:


for (i in myObj.cars) {
     x += myObj.cars[i];
} 

Или ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ Ρ†ΠΈΠΊΠ»Π° for:


for (i = 0; i < myObj.cars.length; i++) {
    x += myObj.cars[i];
} 

Π’Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Π΅ массивы Π² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°Ρ… JSON

ЗначСниями массива Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ массивы ΠΈΠ»ΠΈ Π΄Π°ΠΆΠ΅ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ JSON:


myObj = {
    "name":"John",
    "age":30,
    "cars": [
        { "name":"Ford", "models":[ "Fiesta", "Focus", "Mustang" ] },
        { "name":"BMW", "models":[ "320", "X3", "X5" ] },
        { "name":"Fiat", "models":[ "500", "Panda" ] }
     ]
 } 

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ ΠΊ массивам Π²Π½ΡƒΡ‚Ρ€ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ… массивов, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Ρ†ΠΈΠΊΠ» for-in для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ массива:


for (i in myObj.cars) {
    x += "<h2>" + myObj.cars[i].name + "</h2>";
    for (j in myObj.cars[i].models) {
         x += myObj.cars[i].models[j];
    }
}

ИзмСнСниС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ массива

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ элСмСнта массива, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π΅Π³ΠΎ Π½ΠΎΠΌΠ΅Ρ€ индСкса:


myObj.cars[1] = "Mercedes"; 

Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅ элСмСнта массива

Π§Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ элСмСнт ΠΈΠ· массива, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово delete:


delete myObj.cars[1]; 

JSON.parse() Π’Π²Π΅Ρ€Ρ… JSON — ΠžΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹

JSON Бинтаксис


Бинтаксис JSON являСтся подмноТСством синтаксиса JavaScript.


JSON синтаксичСских ΠΏΡ€Π°Π²ΠΈΠ»

Бинтаксис JSON выводится ΠΈΠ· JavaScript синтаксиса ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° обозначСния:

  • Π”Π°Π½Π½Ρ‹Π΅ Π² ΠΏΠ°Ρ€ имя / Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅
  • Π”Π°Π½Π½Ρ‹Π΅ Ρ€Π°Π·Π΄Π΅Π»Π΅Π½Ρ‹ запятыми
  • Π€ΠΈΠ³ΡƒΡ€Π½Ρ‹Π΅ скобки Π΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹
  • ΠšΠ²Π°Π΄Ρ€Π°Ρ‚Π½Ρ‹Π΅ скобки Π΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ массивы

JSON Π΄Π°Π½Π½Ρ‹Π΅ — имя ΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅

Π”Π°Π½Π½Ρ‹Π΅ Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ JSON записываСтся Π² Π²ΠΈΠ΄Π΅ ΠΏΠ°Ρ€ имя / Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅.

ΠŸΠ°Ρ€Π° имя / Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ состоит ΠΈΠ· ΠΈΠΌΠ΅Π½ΠΈ поля (Π² Π΄Π²ΠΎΠΉΠ½Ρ‹Ρ… ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠ°Ρ…), Π·Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ слСдуСт Π΄Π²ΠΎΠ΅Ρ‚ΠΎΡ‡ΠΈΠ΅, Π·Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ слСдуСт Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅:

ΠΏΡ€ΠΈΠΌΠ΅Ρ€


«firstName»:»John»

ИмСна JSON Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ Π΄Π²ΠΎΠΉΠ½Ρ‹Π΅ ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠΈ. ИмСна JavaScript Π½Π΅Ρ‚.


ЗначСния JSON

ЗначСния JSON ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ:

  • Ряд (Ρ†Π΅Π»ΠΎΠ΅ ΠΈΠ»ΠΈ с ΠΏΠ»Π°Π²Π°ΡŽΡ‰Π΅ΠΉ Ρ‚ΠΎΡ‡ΠΊΠΎΠΉ)
  • Π‘Ρ‚Ρ€ΠΎΠΊΠ° (Π² Π΄Π²ΠΎΠΉΠ½Ρ‹Ρ… ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠ°Ρ…)
  • ЛогичСскоС (истина ΠΈΠ»ΠΈ лоТь)
  • Массив (Π² ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π½Ρ‹Ρ… скобках)
  • ΠžΠ±ΡŠΠ΅ΠΊΡ‚ (Π² Ρ„ΠΈΠ³ΡƒΡ€Π½Ρ‹Ρ… скобках)
  • ноль

ΠžΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ JSON

ΠžΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ JSON Π·Π°ΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ΡΡ Π² Ρ„ΠΈΠ³ΡƒΡ€Π½Ρ‹Π΅ скобки.

Π’Π°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ JavaScript, ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ JSON ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ нСсколько имя / Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΏΠ°Ρ€:

ΠΏΡ€ΠΈΠΌΠ΅Ρ€


{«firstName»:»John», «lastName»:»Doe»}


ΠœΠ°ΡΡΠΈΠ²Ρ‹ JSON

JSON массивы Π·Π°ΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ΡΡ Π² ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π½Ρ‹Ρ… скобках.

Π’Π°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ JavaScript, массив JSON ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ нСсколько ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ²:

ΠΏΡ€ΠΈΠΌΠ΅Ρ€




«employees»:[

Β Β Β 
{«firstName»:»John», «lastName»:»Doe»},

Β Β Β 
{«firstName»:»Anna», «lastName»:»Smith»},

Β Β Β 
{«firstName»:»Peter»,»lastName»:»Jones»}

]

Π’ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ Π²Ρ‹ΡˆΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ «employees» прСдставляСт собой массив , содСрТащий Ρ‚Ρ€ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ прСдставляСт собой запись Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊΠ° (с ΠΈΠΌΠ΅Π½Π΅ΠΌ ΠΈ Ρ„Π°ΠΌΠΈΠ»ΠΈΠ΅ΠΉ).


JSON ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ JavaScript Бинтаксис

ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ синтаксис JSON являСтся ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½Ρ‹ΠΌ ΠΎΡ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° JavaScript Π½ΠΎΡ‚Π°Ρ†ΠΈΠΈ, ΠΎΡ‡Π΅Π½ΡŒ нСбольшоС Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ΅ обСспСчСниС Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с JSON Π² JavaScript.

Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ JavaScript Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ массив ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΈ Π½Π°Π·Π½Π°Ρ‡ΠΈΡ‚ΡŒ Π½Π° Π½Π΅Π³ΠΎ Π΄Π°Π½Π½Ρ‹Π΅, ΠΊΠ°ΠΊ это:

ΠΏΡ€ΠΈΠΌΠ΅Ρ€


var employees =
[
Β Β Β 
{«firstName»:»John», «lastName»:»Doe»},

Β Β Β 
{«firstName»:»Anna», «lastName»:»Smith»},

Β Β Β 
{«firstName»:»Peter»,»lastName»: «Jones»}

];

ΠŸΠ΅Ρ€Π²Π°Ρ запись Π² массив ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² JavaScript ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

Π”Π°Π½Π½Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Ρ‹ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

Она Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ Π³Π»Π°Π²Π΅ Π²Ρ‹ ΡƒΠ·Π½Π°Π΅Ρ‚Π΅, ΠΊΠ°ΠΊ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Ρ‚ΡŒ тСкст JSON Π² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ JavaScript.


Ρ„Π°ΠΉΠ»Ρ‹ Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ JSON

  • Π’ΠΈΠΏ Ρ„Π°ΠΉΠ»Π° для JSON Ρ„Π°ΠΉΠ»ΠΎΠ² «.json»
  • Π’ΠΈΠΏ MIME для JSON тСкста «application/json»

БрСдства Ρ€Π°Π±ΠΎΡ‚Ρ‹ с JSON | 1Π‘:Π—Π°Π·Π΅Ρ€ΠΊΠ°Π»ΡŒΠ΅

07.10.2014

Π Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ΠΎ Π² вСрсии 8.3.6.1977.


JSON (JavaScript Object Notation) это тСкстовый Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ ΠΎΠ±ΠΌΠ΅Π½Π° Π΄Π°Π½Π½Ρ‹ΠΌΠΈ, ΡˆΠΈΡ€ΠΎΠΊΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΉ Π² Π²Π΅Π±-прилоТСниях. По ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ с XML ΠΎΠ½ являСтся Π±ΠΎΠ»Π΅Π΅ Π»Π°ΠΊΠΎΠ½ΠΈΡ‡Π½Ρ‹ΠΌ ΠΈ Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ мСньшС мСста. ΠšΡ€ΠΎΠΌΠ΅ этого всС Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Ρ‹ ΠΈΠΌΠ΅ΡŽΡ‚ встроСнныС срСдства для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с JSON.


ΠΠ΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с этим Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΎΠΌ Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ обусловлСна Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ это Β«ΠΌΠΎΠ΄Π½Ρ‹ΠΉ соврСмСнный» Ρ„ΠΎΡ€ΠΌΠ°Ρ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΡ€ΠΈΠΊΠ»Π°Π΄Π½Ρ‹Π΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ 1Π‘:ΠŸΡ€Π΅Π΄ΠΏΡ€ΠΈΡΡ‚ΠΈΡ сами ΠΏΠΎ сСбС ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΈ со сторонними прилоТСниями. Другая ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π° Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π΅Ρ‰Ρ‘ ΠΈ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ JSON Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² HTTP интСрфСйсах. А Π² 1Π‘:ΠŸΡ€Π΅Π΄ΠΏΡ€ΠΈΡΡ‚ΠΈΠΈ ΠΊΠ°ΠΊ Ρ€Π°Π· Π΅ΡΡ‚ΡŒ Ρ‚Π°ΠΊΠΈΠ΅ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΡ‹, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… хочСтся ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ этот Ρ„ΠΎΡ€ΠΌΠ°Ρ‚. Π­Ρ‚ΠΎ REST интСрфСйс прилоТСния, автоматичСски Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΉ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠΎΠΉ, ΠΈ HTTP-сСрвисы, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ.


ΠœΡ‹ Π²ΠΈΠ΄ΠΈΠΌ нСсколько основных сцСнариСв использования JSON.


Π’ΠΎ-ΠΏΠ΅Ρ€Π²Ρ‹Ρ…, это интСграция с внСшними систСмами Ρ‡Π΅Ρ€Π΅Π· ΠΈΡ… HTTP интСрфСйсы: Google Calendar, Salesforce.com, REST интСрфСйс 1Π‘:ΠŸΡ€Π΅Π΄ΠΏΡ€ΠΈΡΡ‚ΠΈΡ, SharePoint ΠΈ Ρ‚.Π΄.


Π’ΠΎ-Π²Ρ‚ΠΎΡ€Ρ‹Ρ…, это организация собствСнного HTTP интСрфСйса ΠΏΡ€ΠΈΠΊΠ»Π°Π΄Π½ΠΎΠ³ΠΎ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ.


Π’-Ρ‚Ρ€Π΅Ρ‚ΡŒΠΈΡ…, ΠΎΠ±ΠΌΠ΅Π½ Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ JSON с внСшними систСмами. Π€ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Ρ…, настроСчных Ρ„Π°ΠΉΠ»ΠΎΠ². ИспользованиС ΠΈΡ… Π² ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π°Ρ… ΠΎΠ±ΠΌΠ΅Π½Π° Π΄Π°Π½Π½Ρ‹ΠΌΠΈ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, с ΠΈΠ½Ρ‚Π΅Ρ€Π½Π΅Ρ‚-ΠΌΠ°Π³Π°Π·ΠΈΠ½Π°ΠΌΠΈ.


Π’-Ρ‡Π΅Ρ‚Π²Π΅Ρ€Ρ‚Ρ‹Ρ…, это использованиС Ρ„Π°ΠΉΠ»ΠΎΠ² JSON для ΠΎΠ±ΠΌΠ΅Π½Π° Π΄Π°Π½Π½Ρ‹ΠΌΠΈ ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ€Π°Π·Π½Ρ‹ΠΌΠΈ прилоТСниями 1Π‘:ΠŸΡ€Π΅Π΄ΠΏΡ€ΠΈΡΡ‚ΠΈΡ.


Π’ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅ ΠΌΡ‹ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π»ΠΈ нСсколько слоёв Ρ€Π°Π±ΠΎΡ‚Ρ‹ с JSON. Π‘Π°ΠΌΡ‹Π΅ простыС ΠΈ Π³ΠΈΠ±ΠΊΠΈΠ΅ — это Π½ΠΈΠ·ΠΊΠΎΡƒΡ€ΠΎΠ²Π½Π΅Π²Ρ‹Π΅ срСдства ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²ΠΎΠΉ записи ΠΈ чтСния. Π‘ΠΎΠ»Π΅Π΅ высокоуровнСвыС ΠΈ Π½Π΅ Ρ‚Π°ΠΊΠΈΠ΅ ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½Ρ‹Π΅ — срСдства сСриализации Π² JSON ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ² ΠΈ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΉ 1Π‘:ΠŸΡ€Π΅Π΄ΠΏΡ€ΠΈΡΡ‚ΠΈΡ.

ΠŸΠΎΡ‚ΠΎΠΊΠΎΠ²ΠΎΠ΅ Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ ΠΈ запись JSON


ΠžΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹ — это ΠΎΠ±Ρ‰ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Π§Ρ‚Π΅Π½ΠΈΠ΅JSON ΠΈ Π—Π°ΠΏΠΈΡΡŒJSON. Они ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Ρ‡ΠΈΡ‚Π°ΡŽΡ‚ JSON ΠΈΠ· Ρ„Π°ΠΉΠ»Π° ΠΈΠ»ΠΈ строки, ΠΈΠ»ΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Π·Π°ΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ JSON Π² Ρ„Π°ΠΉΠ» ΠΈΠ»ΠΈ строку. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ ΠΈ запись JSON происходят Π±Π΅Π· формирования всСго Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π° Π² памяти.


Π’ качСствС ΠΈΠ»Π»ΡŽΡΡ‚Ρ€Π°Ρ†ΠΈΠΈ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²ΠΎΠ³ΠΎ чтСния JSON ΠΌΠΎΠΆΠ½ΠΎ привСсти ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€:


ΠŸΡ€ΠΈ записи JSON Π²Ρ‹ ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ Ρ„ΠΎΡ€ΠΌΠΈΡ€ΡƒΠ΅Ρ‚Π΅ Π΅Π³ΠΎ структуру. Π§Ρ‚ΠΎΠ±Ρ‹ Β«ΠΏΠΎΠ΄ΡΡ‚Ρ€Π°Ρ…ΠΎΠ²Π°Ρ‚ΡŒΒ» вас ΠΎΡ‚ ошибок, ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π—Π°ΠΏΠΈΡΡŒJSON автоматичСски провСряСт ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΡΡ‚ΡŒ записываСмой структуры. Для увСличСния скорости Ρ€Π°Π±ΠΎΡ‚Ρ‹ эту ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ. Π’ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π½ΠΈΠΆΠ΅ это строка:


Π’Π°ΠΊΠΆΠ΅ ΠΏΡ€ΠΈ записи Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ Ρ„ΠΎΡ€ΠΌΠΈΡ€ΡƒΠ΅ΠΌΠΎΠ³ΠΎ тСкста, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ использованиСм Π΄Π²ΠΎΠΉΠ½Ρ‹Ρ… ΠΊΠ°Π²Ρ‹Ρ‡Π΅ΠΊ, пСрСносом строк, символами отступа ΠΈ экранированиСм символов. Π’ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π½ΠΈΠΆΠ΅ для форматирования тСкста ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ символ табуляции:


ΠŸΠΎΡ‚ΠΎΠΊΠΎΠ²Π°Ρ запись JSON ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ. ЗаписываСтся массив ΠΈΠ· Ρ‡Π΅Ρ‚Ρ‹Ρ€Ρ‘Ρ… элСмСнтов. Π’Ρ€ΠΈ ΠΈΠ· Π½ΠΈΡ… ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ°, Π° Ρ‡Π΅Ρ‚Π²Ρ‘Ρ€Ρ‚Ρ‹ΠΉ элСмСнт — это ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ с двумя свойствами:


Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Ρ‚Π°ΠΊΠΎΠΉ записи:

{
	"Π‘Π²ΠΎΠΉΡΡ‚Π²ΠΎΠ’ΠΈΠΏΠ°ΠœΠ°ΡΡΠΈΠ²": [
		"Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ строка",
		1.2345E1,
		true,
		{
			"БвойствоВипаБтрока": "Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ строка",
			"БвойствоВипаНСопрСдСлСно": null
		}
	]
}

БСриализация ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ² ΠΈ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΉ Π² JSON


Вторая Π³Ρ€ΡƒΠΏΠΏΠ° срСдств Ρ€Π°Π±ΠΎΡ‚Ρ‹ с JSON Ρ…ΠΎΡ€ΠΎΡˆΠ° Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ избавляСт вас ΠΎΡ‚ Ρ€ΡƒΡ‚ΠΈΠ½Π½ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΠΎ Ρ‡Ρ‚Π΅Π½ΠΈΡŽ/записи ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ значСния ΠΈΠ»ΠΈ свойства. ΠŸΡ€ΠΈ Ρ‡Ρ‚Π΅Π½ΠΈΠΈ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Ρ‹ JSON ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°ΡŽΡ‚ΡΡ Π² фиксированный Π½Π°Π±ΠΎΡ€ Ρ‚ΠΈΠΏΠΎΠ² ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹: Π‘Ρ‚Ρ€ΠΎΠΊΠ°, Число, Π‘ΡƒΠ»Π΅Π²ΠΎ, НСопрСдСлСно, Массив, Π€ΠΈΠΊΡΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉΠœΠ°ΡΡΠΈΠ², Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π°, ЀиксированнаяБтруктура, БоотвСтствиС, Π”Π°Ρ‚Π°. БоотвСтствСнно, Π² ΠΎΠ±Ρ€Π°Ρ‚Π½ΡƒΡŽ сторону, композиция ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² этих Ρ‚ΠΈΠΏΠΎΠ² позволяСт ΡΡ„ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π² памяти ΠΈ быстро Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Π² Ρ„Π°ΠΉΠ» структуру JSON. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ ΠΈ запись нСбольшого объСма JSON Π·Π°Ρ€Π°Π½Π΅Π΅ извСстной структуры ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ΡŒ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΈΠΌΠΈ строчками ΠΊΠΎΠ΄Π°.


ОсновноС Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ этих срСдств ΠΌΡ‹ Π²ΠΈΠ΄ΠΈΠΌ Π² ΠΎΠ±ΠΌΠ΅Π½Π΅ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠ΅ΠΉ с внСшними систСмами, Ρ‡Ρ‚Π΅Π½ΠΈΠΈ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ² Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ JSON.


Π‘Π΅Ρ€ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² глобального контСкста ΠŸΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒJSON() ΠΈ Π—Π°ΠΏΠΈΡΠ°Ρ‚ΡŒJSON(). Они Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ Π² связкС с ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ Π§Ρ‚Π΅Π½ΠΈΠ΅JSON ΠΈ Π—Π°ΠΏΠΈΡΡŒJSON.


Π’ качСствС ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° дСсСриализации JSON ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°ΡΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ массива ΠΈΠ· Π΄Π²ΡƒΡ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ²:

[
	{
		"имя": "Anton",
		"фамилия": "Иванов",
		"возраст": 25
	},
	{
		"имя": "Π˜Ρ€ΠΈΠ½Π°",
		"фамилия": "Иванова",
		"возраст": 20
	}
]


Код 1Π‘:ΠŸΡ€Π΅Π΄ΠΏΡ€ΠΈΡΡ‚ΠΈΡ, Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‰ΠΈΠΉ Π΄Π΅ΡΠ΅Ρ€ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ, ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:


А ΠΏΡ€ΠΈΠΌΠ΅Ρ€ сСриализации (записи) Π² JSON ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ Ρ‚Π°ΠΊ:


Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ записи:

{
	"Ѐамилия": "Иванов",
	"Имя": "Иван",
	"ΠžΡ‚Ρ‡Π΅ΡΡ‚Π²ΠΎ": "Π˜Π²Π°Π½ΠΎΠ²ΠΈΡ‡",
	"Возраст": 40,
	"Π–Π΅Π½Π°Ρ‚": true,
	"Π’Π΅Π»Π΅Ρ„ΠΎΠ½Ρ‹": [
		"8-999-999-99-90",
		"8-999-999-99-91"
	]
}

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ прСобразования ΠΈ восстановлСния ΠΏΡ€ΠΈ сСриализации


НС всСгда сСриализация ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Π° ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ автоматичСски. Π’ ΠΆΠΈΠ·Π½ΠΈ Π²ΡΡ‚Ρ€Π΅Ρ‡Π°ΡŽΡ‚ΡΡ самыС Ρ€Π°Π·Π½Ρ‹Π΅ ситуации. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ ΠΌΡ‹ Π΄ΠΎΠ±Π°Π²ΠΈΠ»ΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Β«ΡΠ°ΠΌΠΎΠΏΠΈΡΠ½ΡƒΡŽΒ» Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΏΡ€ΠΈ записи Π² JSON ΠΈ ΠΏΡ€ΠΈ Ρ‡Ρ‚Π΅Π½ΠΈΠΈ ΠΈΠ· JSON.


Π’ ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅ Π—Π°ΠΏΠΈΡΠ°Ρ‚ΡŒJSON() ΠΎΠ½Π° называСтся Ѐункция прСобразования ΠΈ описываСтся с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ‚Ρ€Ρ‘Ρ… ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ²:

  • Π˜ΠΌΡΠ€ΡƒΠ½ΠΊΡ†ΠΈΠΈΠŸΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΡ;
  • ΠœΠΎΠ΄ΡƒΠ»ΡŒΠ€ΡƒΠ½ΠΊΡ†ΠΈΠΈΠŸΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΡ;
  • Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈΠŸΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΡ.


Π’ ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅ ΠŸΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒJSON() ΠΎΠ½Π° называСтся Ѐункция восстановлСния ΠΈ для Π½Π΅Ρ‘ Π΅ΡΡ‚ΡŒ Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½Ρ‹Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹:

  • Π˜ΠΌΡΠ€ΡƒΠ½ΠΊΡ†ΠΈΠΈΠ’ΠΎΡΡΡ‚Π°Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ;
  • ΠœΠΎΠ΄ΡƒΠ»ΡŒΠ€ΡƒΠ½ΠΊΡ†ΠΈΠΈΠ’ΠΎΡΡΡ‚Π°Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ;
  • Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈΠ’ΠΎΡΡΡ‚Π°Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ.


ΠŸΡ€ΠΈ записи Π² JSON эта функция ΠΏΠΎΠ»Π΅Π·Π½Π° ΠΏΠΎΡ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ позволяСт ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Ρ‚ΡŒ Π² JSON Ρ‚Π΅ Ρ‚ΠΈΠΏΡ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ ΠΏΠΎΠ΄Π»Π΅ΠΆΠ°Ρ‚ автоматичСскому ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΡŽ. Или Π΄Π°ΠΆΠ΅ совсСм ΠΎΡ‚ΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ ΠΎΡ‚ ΠΈΡ… сСриализации.


НапримСр, Ρ‚Π°ΠΊ оказалось, Ρ‡Ρ‚ΠΎ Π² записываСмой структурС ΠΎΠ΄Π½ΠΎ ΠΈΠ· Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ — это ссылка Π½Π° элСмСнт справочника ΠŸΠΎΠ΄Ρ€Π°Π·Π΄Π΅Π»Π΅Π½ΠΈΡΠžΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΉ. Π’Π°ΠΊΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ (ссылка Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ 1Π‘:ΠŸΡ€Π΅Π΄ΠΏΡ€ΠΈΡΡ‚ΠΈΡ) Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ автоматичСски сСриализовано срСдствами ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹. Π’ΠΎΠ³Π΄Π°, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ прСобразования, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ для этого значСния Π΅Π³ΠΎ строковоС прСдставлСниС Π² ΡƒΠ΄ΠΎΠ±Π½ΠΎΠΌ Π²ΠΈΠ΄Π΅. НапримСр, Π² Π²ΠΈΠ΄Π΅ строки «ИП ΠŸΠ΅Ρ‚Ρ€ΠΎΠ²: ΠžΡ‚Π΄Π΅Π» Ρ€Π΅ΠΊΠ»Π°ΠΌΡ‹Β».


Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ выполнСния ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°:

{
	"Ѐамилия": "Иванов",
	"Имя": "Иван",
	"ΠžΡ‚Ρ‡Π΅ΡΡ‚Π²ΠΎ": "Π˜Π²Π°Π½ΠΎΠ²ΠΈΡ‡",
	"ΠŸΠΎΠ΄Ρ€Π°Π·Π΄Π΅Π»Π΅Π½ΠΈΠ΅": "ИП ΠŸΠ΅Ρ‚Ρ€ΠΎΠ²: ΠžΡ‚Π΄Π΅Π» Ρ€Π΅ΠΊΠ»Π°ΠΌΡ‹",
	"Π’Π΅Π»Π΅Ρ„ΠΎΠ½Ρ‹": [
		"8-999-999-99-90",
		"8-999-999-99-91"
	]
}


ΠŸΡ€ΠΈ Ρ‡Ρ‚Π΅Π½ΠΈΠΈ ΠΈΠ· JSON функция восстановлСния ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ JSON Π² Ρ‚ΠΈΠΏΡ‹ 1Π‘, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΡΠ²Π»ΡΡ‚ΡŒΡΡ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠΌ автоматичСского прСобразования, ΠΈΠ»ΠΈ для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ (Π½Π΅ автоматичСски) ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Ρ‚ΡŒ Π΄Π°Ρ‚Ρ‹ JSON Π² Π΄Π°Ρ‚Ρ‹ 1Π‘:ΠŸΡ€Π΅Π΄ΠΏΡ€ΠΈΡΡ‚ΠΈΡ.

БСриализация Ρ‚ΠΈΠΏΠ° Π”Π°Ρ‚Π°


Π”Π°Π½Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΠ° Π”Π°Ρ‚Π° ΡΠ΅Ρ€ΠΈΠ°Π»ΠΈΠ·ΡƒΡŽΡ‚ΡΡ Π² JSON автоматичСски, Π° Π²ΠΎΡ‚ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠ΅ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ (дСсСриализация) ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΎ Π½Π΅ всСгда. JSON Π½Π΅ содСрТит Ρ‚ΠΈΠΏΠ° Π”Π°Ρ‚Π°, значСния Π΄Π°Ρ‚Ρ‹ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ΡΡ Π² Π½Ρ‘ΠΌ строкой. ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ, ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Ρ‹ прСдставлСния Π΄Π°Ρ‚, Π½ΠΎ Π²ΠΎΠΎΠ±Ρ‰Π΅ говоря, внСшний Π²ΠΈΠ΄ Ρ‚Π°ΠΊΠΎΠΉ строки ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ самым Ρ€Π°Π·Π½ΠΎΠΎΠ±Ρ€Π°Π·Π½Ρ‹ΠΌ.


Для сСриализации Ρ‚ΠΈΠΏΠ° Π”Π°Ρ‚Π° Π² JSON Ρƒ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Π—Π°ΠΏΠΈΡΠ°Ρ‚ΡŒJSON() Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ НастройкиБСриализации. Π­Ρ‚ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ встроСнного языка, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ позволяСт ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ, Π² ΠΊΠ°ΠΊΠΎΠΌ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π΅ Π±ΡƒΠ΄Π΅Ρ‚ записана Π΄Π°Ρ‚Π° (UTC, локальная Π΄Π°Ρ‚Π° ΠΈΠ»ΠΈ локальная Π΄Π°Ρ‚Π° со смСщСниСм) ΠΈ Π² ΠΊΠ°ΠΊΠΎΠΌ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ (ISO, JavaScript ΠΈΠ»ΠΈ Microsoft).


Код 1Π‘:ΠŸΡ€Π΅Π΄ΠΏΡ€ΠΈΡΡ‚ΠΈΡ:


ВСкст JSON:

[
	{
		"Ѐамилия": "Иванов",
		"ДатаРоТдСния": "1987-05-14T00:00:00"
	},
	{
		"Ѐамилия": "ΠŸΠ΅Ρ‚Ρ€ΠΎΠ²",
		"ДатаРоТдСния": "1993-11-21T00:00:00"
	}
]


ΠŸΡ€ΠΈ Ρ‡Ρ‚Π΅Π½ΠΈΠΈ Π΄Π°Ρ‚Ρ‹ ΠΈΠ· JSON всё обстоит слоТнСС. Π’ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π΅ Π˜ΠΌΠ΅Π½Π°Π‘Π²ΠΎΠΉΡΡ‚Π²Π‘ΠΎΠ—Π½Π°Ρ‡Π΅Π½ΠΈΡΠΌΠΈΠ”Π°Ρ‚Π° Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠ΅Ρ€Π΅Ρ‡ΠΈΡΠ»ΠΈΡ‚ΡŒ Ρ‚Π΅ свойства JSON, значСния ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π½ΡƒΠΆΠ½ΠΎ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Ρ‚ΡŒ Π² Π΄Π°Ρ‚Ρƒ 1Π‘:ΠŸΡ€Π΅Π΄ΠΏΡ€ΠΈΡΡ‚ΠΈΡ (Ρ‚ΠΈΠΏ Π”Π°Ρ‚Π°). А Π² ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π΅ ΠžΠΆΠΈΠ΄Π°Π΅ΠΌΡ‹ΠΉΠ€ΠΎΡ€ΠΌΠ°Ρ‚Π”Π°Ρ‚Ρ‹ Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ, Π² ΠΊΠ°ΠΊΠΎΠΌ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ эти Π΄Π°Π½Π½Ρ‹Π΅ содСрТатся Π² JSON (ISO, JavaScript ΠΈΠ»ΠΈ Microsoft).


ВСкст JSON:

[
	{
		"Ѐамилия": "Иванов",
		"ДатаРоТдСния": "1987-05-14T00:00:00"
	},
	{
		"Ѐамилия": "ΠŸΠ΅Ρ‚Ρ€ΠΎΠ²",
		"ДатаРоТдСния": "1993-11-21T00:00:00"
	}
]


Код 1Π‘:ΠŸΡ€Π΅Π΄ΠΏΡ€ΠΈΡΡ‚ΠΈΡ:


Однако Ссли окаТСтся, Ρ‡Ρ‚ΠΎ Π² ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ ΠΌΠΎΠΌΠ΅Π½Ρ‚ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ Π΄Π°Π½Π½Ρ‹Ρ… JSON Π½Π΅ совпадаСт с ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌΡ‹ΠΌ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΎΠΌ, Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π·Π²Π°Π½ΠΎ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅.


Π’ Ρ‚Π°ΠΊΠΎΠΉ ситуации, для большСй ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Ρ‚Π΅ ΠΆΠ΅ самыС свойства JSON Π² массив, ΠΏΠΎΠ΄Π»Π΅ΠΆΠ°Ρ‰ΠΈΠΉ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ восстановлСния — Π˜ΠΌΠ΅Π½Π°Π‘Π²ΠΎΠΉΡΡ‚Π²Π”Π»ΡΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈΠ’ΠΎΡΡΡ‚Π°Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ. И ΡƒΠΆΠ΅ Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ восстановлСния Π²Ρ‹ ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ дСсСриализуСтС Π΄Π°Ρ‚Ρ‹ JSON, Π² ΠΊΠ°ΠΊΠΎΠΌ Π±Ρ‹ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ ΠΎΠ½ΠΈ Π½ΠΈ Π±Ρ‹Π»ΠΈ прСдставлСны.

ИспользованиС JSON Π² HTTP интСрфСйсах ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ

АвтоматичСски Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΉ REST интСрфСйс ΠΏΡ€ΠΈΠΊΠ»Π°Π΄Π½Ρ‹Ρ… Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΉ


ΠŸΡ€ΠΈ ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠΈ ΠΊ REST интСрфСйсу ΠΏΡ€ΠΈΠΊΠ»Π°Π΄Π½ΠΎΠ³ΠΎ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ ΠΎΡ‚Π²Π΅Ρ‚ Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ JSON. Для этого Π² адрСсной строкС Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ $format=json. Π›ΠΈΠ±ΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ MIME Ρ‚ΠΈΠΏ «application/json» Π² Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ΅ Accept HTTP запроса. НапримСр:


Запрос:

GET /TestInfobase/odata/standard.odata/БправочникДляВСстов?$format=json HTTP/1.1
MaxDataServiceVersion: 3.0;NetFx
Accept: application/json
Accept-Charset: UTF-8
User-Agent: Microsoft ADO.NET Data Services


ΠžΡ‚Π²Π΅Ρ‚:

HTTP/1.1 200 OK
Content-Length: 9429
Content-Type: application/json;charset=utf-8
Server: Microsoft-IIS/7.5
DataServiceVersion: 3.0
X-Powered-By: ASP.NET
Date: Mon, 12 Aug 2013 09:44:07 GMT
    
{
"odata.metadata":"http://host/svc/$metadata#БправочникДляВСстов",
"value":[
{
	"Ref_Key":guid'cc6a7df3-8cfe-11dc-8ca0-000d8843cd1b',
	"DataVersion":"AAAAAQAAAAE",	
	"DeletionMark":false,
	"Parent_Key":guid'bbb079ae-8c51-11db-a9b0-00055d49b45e',
	"IsFolder":false,
	"Code":000000025,
	"Description":"ΠŸΠΈΠ½Π΅Ρ‚ΠΊΠΈ",
	"ΠŸΠΎΡΡ‚Π°Π²Ρ‰ΠΈΠΊ_Key":guid'd1cb82a7-8e8b-11db-a9b0-00055d49b45e',
	"ΠŸΠΎΡΡ‚Π°Π²Ρ‰ΠΈΠΊ@navigationLinkUrl":"БправочникДляВСстов(guid'cc6a7df3-8cfe-11dc-8ca0-000d8843cd1b')/ΠŸΠΎΡΡ‚Π°Π²Ρ‰ΠΈΠΊ",
	"Π Π΅ΠΊΠ²ΠΈΠ·ΠΈΡ‚Π₯Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅_Type": "image/jpeg",
	"Π Π΅ΠΊΠ²ΠΈΠ·ΠΈΡ‚Π₯Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅_Base64Data@mediaReadLink": "Catalog_Π”Π΅ΠΌΠΎΠ‘ΠΏΡ€Π°Π²ΠΎΡ‡Π½ΠΈΠΊ(guid'cf2b1a24-1b96-11e3-8f11-5404a6a68c42')/Π Π΅ΠΊΠ²ΠΈΠ·ΠΈΡ‚Π₯Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅_Base64Data",
	"Π Π΅ΠΊΠ²ΠΈΠ·ΠΈΡ‚Π₯Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅_Base64Data": <строка с Π·Π°ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌΠΈ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ>
	…
},
{…},
{…}
]
}


Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ ΠΎΠ±ΡŠΡ‘ΠΌΠΎΠΌ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Π΅ΠΌΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ Π·Π° счёт измСнСния Π΄Π΅Ρ‚Π°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ прСдставлСния ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Ρ… Π² Π²Ρ‹Π³Ρ€ΡƒΠ·ΠΊΠ΅. Π‘ΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ Ρ‚Ρ€ΠΈ уровня: Nometadata, Minimalmetadata ΠΈ Fullmetadata. По-ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ (Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π²Π²Π΅Ρ€Ρ…Ρƒ) ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ срСдний ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ — Minimalmetadata. На ΡƒΡ€ΠΎΠ²Π½Π΅ Nometadata ΠΎΠ±ΡŠΡ‘ΠΌ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Π΅ΠΌΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ, Π° Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ Fullmetadata — ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ. Однако ΠΏΡ€ΠΈ этом Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ сокращСниС ΠΎΠ±ΡŠΡ‘ΠΌΠ° ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Π΅ΠΌΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ Π±ΠΎΠ»Π΅Π΅ интСнсивным вычислСниям Π½Π° ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π΅. И Π½Π°ΠΎΠ±ΠΎΡ€ΠΎΡ‚, ΠΊΠΎΠ³Π΄Π° вся информация Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Π²Ρ‹Π³Ρ€ΡƒΠ·ΠΊΡƒ, ΠΎΠ±ΡŠΡ‘ΠΌ вычислСний Π½Π° ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΌ.


Π”Π΅Ρ‚Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ прСдставлСния ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Ρ… Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π² адрСсной строкС.


БвСдСния ΠΎ ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Ρ… Π½Π΅ ΠΏΠ΅Ρ€Π΅Π΄Π°ΡŽΡ‚ΡΡ:

GET /TestInfobase/odata/standard.odata/БправочникДляВСстов/?$format=application/json;odata= minimalmetadata


Вся информация ΠΎ ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Ρ… Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Π²Ρ‹Π³Ρ€ΡƒΠ·ΠΊΡƒ:

GET /TestInfobase/odata/standard.odata/БправочникДляВСстов/?$format=application/json;odata=fullmetadata

HTTP-сСрвисы ΠΏΡ€ΠΈΠΊΠ»Π°Π΄Π½ΠΎΠ³ΠΎ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ


HTTP-сСрвисы, Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹Π΅ Π² ΠΏΡ€ΠΈΠΊΠ»Π°Π΄Π½ΠΎΠΌ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΈ, Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠ³ΡƒΡ‚ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ ΠΎΡ‚Π²Π΅Ρ‚ Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ JSON. Для этого Π²Π°ΠΌ ΠΏΡ€ΠΎΡ‰Π΅ всСго ΡΡ„ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚Π΅Π»ΠΎ ΠΎΡ‚Π²Π΅Ρ‚Π° Π² JSON, ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π΅Π³ΠΎ ΠΊΠ°ΠΊ строку, Π° Π·Π°Ρ‚Π΅ΠΌ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΈΠ· этой строки Ρ‚Π΅Π»ΠΎ HTTP ΠΎΡ‚Π²Π΅Ρ‚Π° сСрвиса. ΠŸΡ€ΠΈ этом ΠΆΠ΅Π»Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ BOM (Byte Order Mark, ΠΌΠ΅Ρ‚ΠΊΠ° порядка Π±Π°ΠΉΡ‚ΠΎΠ²) ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Π°.


ПослСдний ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ (ИспользованиСByteOrderMark.ΠΠ΅Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ) Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈ Π½Π΅ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ, Ссли Ρ€Π΅ΠΆΠΈΠΌ совмСстимости ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ Π½Π΅ установлСн, ΠΈΠ»ΠΈ ΠΎΠ½ большС Ρ‡Π΅ΠΌ ВСрсия8_3_5. ΠŸΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Π² этом случаС BOM автоматичСски Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΎΠΊ UTF-16 ΠΈ UTF-32, Π° для UTF-8, UTF-16LE/UTF-16BE, UTF-32LE/UTF-32BE ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΎΠ½Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚.

ВзаимодСйствиС со сторонними HTTP сСрвисами


ΠŸΡ€ΠΈ взаимодСйствии со сторонними HTTP интСрфСйсами Ρƒ вас Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΡƒΡ‚ΡŒ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ формирования запросов ΠΊ Π½ΠΈΠΌ Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ JSON. Π’ этом случаС Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ Π²Π°ΡˆΠΈΡ… дСйствий Π±ΡƒΠ΄Π΅Ρ‚ Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½Ρ‹ΠΌ. Π€ΠΎΡ€ΠΌΠΈΡ€ΡƒΠ΅Ρ‚Π΅ Ρ‚Π΅Π»ΠΎ запроса Π² JSON. ΠŸΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚Π΅ Ρ‚Π΅Π»ΠΎ Π² Π²ΠΈΠ΄Π΅ строки. Из этой строки устанавливаСтС Ρ‚Π΅Π»ΠΎ HTTP запроса. BOM Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅.

Π”Π°Π»ΡŒΠ½Π΅ΠΉΡˆΠ΅Π΅ Ρ€Π°Π·Π²ΠΈΡ‚ΠΈΠ΅


ΠœΡ‹ Π΄ΡƒΠΌΠ°Π΅ΠΌ Π½Π°Π΄ Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π²Π°ΠΌ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ сСриализации Π² JSON ΠΏΡ€ΠΈΠΊΠ»Π°Π΄Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ² 1Π‘:ΠŸΡ€Π΅Π΄ΠΏΡ€ΠΈΡΡ‚ΠΈΡ: ссылок, ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², Π½Π°Π±ΠΎΡ€ΠΎΠ² записСй ΠΈ Ρ‚.Π΄. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Π΅ΡΡ‚ΡŒ Π²Π΅Ρ€ΠΎΡΡ‚Π½ΠΎΡΡ‚ΡŒ появлСния Π΅Ρ‰Ρ‘ ΠΎΠ΄Π½ΠΎΠ³ΠΎ, Ρ‚Ρ€Π΅Ρ‚ΡŒΠ΅Π³ΠΎ уровня срСдств Ρ€Π°Π±ΠΎΡ‚Ρ‹ с JSON. Π­Ρ‚ΠΎΡ‚ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ Π²Π°ΠΌ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ Π² JSON Π»ΡŽΠ±Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹ 1Π‘:ΠŸΡ€Π΅Π΄ΠΏΡ€ΠΈΡΡ‚ΠΈΡ, для ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… поддСрТиваСтся XDTO-сСриализация Π² XML.

Π’Π΅Π³ΠΈ:
JSONΒ 

Π Π°ΡΡΠΊΠ°Π·Π°Ρ‚ΡŒ Π΄Ρ€ΡƒΠ·ΡŒΡΠΌ:

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с JSON | Yandex.Cloud

JSON — слабо схСматизированный Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ Π΄Π°Π½Π½Ρ‹Ρ…, прСдставлСнный Π² YQL Ρ‚ΠΈΠΏΠΎΠΌ Json. Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠΈ ΠΎΡ‚ рСляционных Ρ‚Π°Π±Π»ΠΈΡ†, JSON ΠΌΠΎΠΆΠ΅Ρ‚ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅, для ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… схСма Π½Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π°. Π’ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π²Π°Π»ΠΈΠ΄Π½ΠΎΠ³ΠΎ JSON:

[
    {
        "name": "Jim Holden",
        "age": 30
    },
    {
        "name": "Naomi Nagata",
        "age": "twenty years old"
    }
]

НСсмотря Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π² ΠΏΠ΅Ρ€Π²ΠΎΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π΅ ΠΏΠΎΠ»Π΅ age ΠΈΠΌΠ΅Π΅Ρ‚ Ρ‚ΠΈΠΏ Number ("age": 21), Π° Π²ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΌ String ("age": "twenty years old"), это ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ Π²Π°Π»ΠΈΠ΄Π½Ρ‹ΠΉ JSON.

Для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с JSON, YQL Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ подмноТСство стандарта SQL support for JavaScript Object Notation (JSON), ΡΠ²Π»ΡΡŽΡ‰Π΅Π³ΠΎΡΡ Ρ‡Π°ΡΡ‚ΡŒΡŽ общСпринятого стандарта ANSI SQL.

JsonPath

Для обращСния ΠΊ значСниям Π²Π½ΡƒΡ‚Ρ€ΠΈ JSON ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ язык запросов JsonPath. ВсС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с JSON ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‚ JsonPath запрос Π² качСствС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°.

Π‘Ρ€Π°Π·Ρƒ Ρ€Π°Π·Π±Π΅Ρ€Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€. ΠŸΡƒΡΡ‚ΡŒ Ρƒ нас Π΅ΡΡ‚ΡŒ JSON:

{
    "comments": [
        {
            "id": 123,
            "text": "A whisper will do, if it's all that you can manage."
        },
        {
            "id": 456,
            "text": "My life has become a single, ongoing revelation that I haven’t been cynical enough."
        }
    ]
}

Π’ΠΎΠ³Π΄Π° Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ тСкст Π²Ρ‚ΠΎΡ€ΠΎΠ³ΠΎ коммСнтария ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ JsonPath запрос:

Π’ этом запросС:

  1. $ — это способ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒΡΡ ΠΊΠΎ всСму JSON
  2. $.comments — ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ ΠΊ ΠΊΠ»ΡŽΡ‡Ρƒ comments ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° JSON
  3. $.comments[1] — ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ ΠΊΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΌΡƒ элСмСнту массива JSON (нумСрация с элСмСнтов начинаСтся с 0)
  4. $.comments[1].text — ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ ΠΊ ΠΊΠ»ΡŽΡ‡Ρƒ text ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° JSON
  5. Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ выполнСния: "My life has become a single, ongoing revelation that I haven’t been cynical enough."

Quick reference

ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΡΠŸΡ€ΠΈΠΌΠ΅Ρ€
Π˜Π·Π²Π»Π΅Ρ‡ΡŒ ΠΊΠ»ΡŽΡ‡ JSON ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°$.key
Π˜Π·Π²Π»Π΅Ρ‡ΡŒ всС ΠΊΠ»ΡŽΡ‡ΠΈ JSON ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°$.*
ΠžΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ ΠΊ элСмСнту массива$[25]
Π˜Π·Π²Π»Π΅Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠΎΠ΄ΠΎΡ‚Ρ€Π΅Π·ΠΊΠ° массива$[2 to 5]
ΠžΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ ΠΊ послСднСму элСмСнту массива$[last]
ΠžΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ ΠΊΠΎ всСм элСмСнтам массива$[*]
Π£Π½Π°Ρ€Π½Ρ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ- 1
Π‘ΠΈΠ½Π°Ρ€Π½Ρ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ(12 * 3) % 4 + 8
ΠžΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ ΠΊ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ$variable
ЛогичСскиС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ(1 > 2) || (3 <= 4) && ("string" == "another")
БоотвСтствиС рСгулярному Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΡŽ$.name like_regex "^[A-Za-z]+$"
ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° прСфикса строки$.name starts with "Bobbie"
ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° сущСствования ΠΏΡƒΡ‚ΠΈexists ($.profile.name)
ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° булСвского выраТСния Π½Π° null($.age > 20) is unknown
Π€ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΡ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ$.friends ? (@.age >= 18 && @.gender == "male")
ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠ° значСния$.name.type()
ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° массива$.friends.size()
ΠŸΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ строки Π² число$.number.double()
ΠžΠΊΡ€ΡƒΠ³Π»Π΅Π½ΠΈΠ΅ числа Π²Π²Π΅Ρ€Ρ…$.number.ceiling()
ΠžΠΊΡ€ΡƒΠ³Π»Π΅Π½ΠΈΠ΅ числа Π²Π½ΠΈΠ·$.number.floor()
ΠΠ±ΡΠΎΠ»ΡŽΡ‚Π½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ числа$.number.abs()
ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ ΠΏΠ°Ρ€ ΠΊΠ»ΡŽΡ‡-значСния ΠΈΠ· ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°$.profile.keyvalue()

МодСль Π΄Π°Π½Π½Ρ‹Ρ…

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ выполнСния всСх JsonPath Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ — это ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ JSON Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ. НапримСр:

  • Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ выраТСния "Bobbie" — это ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π΄Π»ΠΈΠ½Ρ‹ 1 с СдинствСнным элСмСнтом "Bobbie".
  • Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ выраТСния $ (взятиС всСго JSON ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°) Π½Π° JSON [1, 2, 3] — это [1, 2, 3]. ΠŸΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΈΠ· 1 элСмСнта, массива [1, 2, 3]
  • Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ выраТСния $[*] (ΠΈΠ·Π²Π»Π΅Ρ‡Π΅Π½ΠΈΠ΅ всСх элСмСнтов массива) Π½Π° JSON [1, 2, 3] — это 1, 2, 3. ΠŸΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΈΠ· Ρ‚Ρ€Π΅Ρ… элСмСнтов 1, 2 ΠΈ 3

Если входная ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ состоит ΠΈΠ· Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ, Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ исполнятся для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ элСмСнта (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, доступ ΠΊ ΠΊΠ»ΡŽΡ‡Ρƒ JSON ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°). ΠŸΡ€ΠΈ этом Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΈΠ· ΠΎΠ΄Π½ΠΎΠ³ΠΎ элСмСнта Π½Π° Π²Ρ…ΠΎΠ΄ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π±ΠΈΠ½Π°Ρ€Π½Ρ‹Π΅ арифмСтичСскиС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ).

ПовСдСниС ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ описано Π² ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΉ сСкции Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ.

Π Π΅ΠΆΠΈΠΌ выполнСния

JsonPath ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Π΄Π²Π° Ρ€Π΅ΠΆΠΈΠΌΠ° выполнСния — lax ΠΈ strict. Π£ΠΊΠ°Π·Π°Π½ΠΈΠ΅ Ρ€Π΅ΠΆΠΈΠΌΠ° Π½Π΅ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ lax. Π Π΅ΠΆΠΈΠΌ указываСтся Π² Π½Π°Ρ‡Π°Π»Π΅ запроса, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€: strict $.key.

ПовСдСниС ΠΏΡ€ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ Ρ€Π΅ΠΆΠΈΠΌΠ΅ описано Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… JsonPath ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ.

АвтоматичСская распаковка массива

ΠŸΡ€ΠΈ ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠΈ ΠΊ ΠΊΠ»ΡŽΡ‡Ρƒ JSON ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π² lax Ρ€Π΅ΠΆΠΈΠΌΠ΅ массивы автоматичСски Ρ€Π°ΡΠΏΠ°ΠΊΠΎΠ²Ρ‹Π²Π°ΡŽΡ‚ΡΡ.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€:

[
    {
        "key": 123
    },
    {
        "key": 456
    }
]

Запрос lax $.key ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ выполнится с Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠΌ 123, 456. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ $ являСтся массивом, ΠΎΠ½ автоматичСски распакуСтся, ΠΈ ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ ΠΊ ΠΊΠ»ΡŽΡ‡Ρƒ JSON ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° $.key Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΎ для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ элСмСнта массива.

ΠŸΡ€ΠΈ этом запрос strict $.key Π·Π°Π²Π΅Ρ€ΡˆΠΈΡ‚ΡΡ с ошибкой. Π’ strict Ρ€Π΅ΠΆΠΈΠΌΠ΅ Π½Π΅Ρ‚ автоматичСской распаковки массивов. $ являСтся массивом, Π° Π½Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ, поэтому ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ ΠΊ ΠΊΠ»ΡŽΡ‡Ρƒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° $.key Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΎ. Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ, написав strict $[*].key.

Распаковка происходит Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π° 1 ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ Π²Π³Π»ΡƒΠ±ΡŒ. Π’ случаС Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Ρ… массивов распаковываСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ самый внСшний ΠΈΠ· Π½ΠΈΡ….

ΠžΠ±Π΅Ρ€Ρ‚ΠΊΠ° Π² массив

ΠŸΡ€ΠΈ ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠΈ ΠΊ элСмСнту массива Π² lax Ρ€Π΅ΠΆΠΈΠΌΠ΅ JSON значСния автоматичСски ΠΎΠ±ΠΎΡ€Π°Ρ‡ΠΈΠ²Π°ΡŽΡ‚ΡΡ Π² массив.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€:

Запрос lax $[0].name выполнится ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ с Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠΌ "Avasarala". ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ $ Π½Π΅ являСтся массивом, ΠΎΠ½ Π±ΡƒΠ΄Π΅Ρ‚ автоматичСски ΠΎΠ±Π΅Ρ€Π½ΡƒΡ‚ Π² массив Π΄Π»ΠΈΠ½Ρ‹ ΠΎΠ΄ΠΈΠ½. ΠžΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ ΠΊ ΠΏΠ΅Ρ€Π²ΠΎΠΌΡƒ элСмСнту $[0] Π²Π΅Ρ€Π½Π΅Ρ‚ исходный JSON ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π±ΡƒΠ΄Π΅Ρ‚ взят ΠΊΠ»ΡŽΡ‡ name.

ΠŸΡ€ΠΈ этом запрос strict $[0].name Π·Π°Π²Π΅Ρ€ΡˆΠΈΡ‚ΡΡ с ошибкой. Π’ strict Ρ€Π΅ΠΆΠΈΠΌΠ΅ Π½Π΅Ρ‚ автоматичСской ΠΎΠ±Π΅Ρ€Ρ‚ΠΊΠΈ Π² массив. $ являСтся ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ, Π° Π½Π΅ массивом, поэтому ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ ΠΊ элСмСнту $[0] Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΎ. Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ, написав strict $.name.

ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ошибок

НСкоторыС ошибки ΠΊΠΎΠ½Π²Π΅Ρ€Ρ‚ΠΈΡ€ΡƒΡŽΡ‚ΡΡ Π² пустой Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ ΠΏΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ Π² lax Ρ€Π΅ΠΆΠΈΠΌΠ΅.

Π›ΠΈΡ‚Π΅Ρ€Π°Π»Ρ‹

ЗначСния Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ² ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ Π² JsonPath запросС ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Π»ΠΈΡ‚Π΅Ρ€Π°Π»Ρ‹:

Π’ΠΈΠΏΠŸΡ€ΠΈΠΌΠ΅Ρ€
Числа42, -1.23e-5
БулСвскиС значСнияfalse, true
Nullnull
Π‘Ρ‚Ρ€ΠΎΠΊΠΈ"Belt"

ΠžΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ ΠΊ ΠΊΠ»ΡŽΡ‡Ρƒ JSON ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°

JsonPath ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ ΠΊ ΠΊΠ»ΡŽΡ‡Π°ΠΌ JSON ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ²: $.session.user.name.

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅

ΠžΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ Π±Π΅Π· ΠΊΠ°Π²Ρ‹Ρ‡Π΅ΠΊ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для ΠΊΠ»ΡŽΡ‡Π΅ΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‚ΡΡ с Π±ΡƒΠΊΠ²Ρ‹ английского Π°Π»Ρ„Π°Π²ΠΈΡ‚Π° ΠΈΠ»ΠΈ подчСркивания, ΠΈ содСрТат Π² сСбС Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π±ΡƒΠΊΠ²Ρ‹ английского Π°Π»Ρ„Π°Π²ΠΈΡ‚Π°, подчСркивания, Ρ†ΠΈΡ„Ρ€Ρ‹ ΠΈ Π·Π½Π°ΠΊ Π΄ΠΎΠ»Π»Π°Ρ€Π°. Для всСх ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Ρ… ΠΊΠ»ΡŽΡ‡Π΅ΠΉ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠΈ. НапримСр: $.profile."this string has spaces", $.user."42 is the answer"

Для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ значСния ΠΈΠ· Π²Ρ…ΠΎΠ΄Π½ΠΎΠΉ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ:

  1. Если Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ являСтся массивом, Π² lax Ρ€Π΅ΠΆΠΈΠΌΠ΅ происходит автоматичСская распаковка массива
  2. Если Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π½Π΅ являСтся JSON ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ ΠΈΠ»ΠΈ ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΉ ΠΊΠ»ΡŽΡ‡ Π² этом JSON ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π΅ отсутствуСт, Π² strict Ρ€Π΅ΠΆΠΈΠΌΠ΅ запрос Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ΡΡ ошибкой. Π’ lax Ρ€Π΅ΠΆΠΈΠΌΠ΅ для этого значСния возвращаСтся пустой Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ выраТСния — конкатСнация Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ² для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ значСния ΠΈΠ· Π²Ρ…ΠΎΠ΄Π½ΠΎΠΉ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€:

{
    "name": "Amos",
    "friends": [
        {
            "name": "Jim"
        },
        {
            "name": "Alex"
        }
    ]
}
laxstrict
$.name"Amos""Amos"
$.surnameΠŸΡƒΡΡ‚ΠΎΠΉ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠžΡˆΠΈΠ±ΠΊΠ°
$.friends.name"Jim", "Alex"Ошибка

ΠžΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ ΠΊΠΎ всСм ΠΊΠ»ΡŽΡ‡Π°ΠΌ JSON ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°

JsonPath ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ ΠΊΠΎ всСм ΠΊΠ»ΡŽΡ‡Π°ΠΌ JSON ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² сразу: $.*.

Для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ значСния ΠΈΠ· Π²Ρ…ΠΎΠ΄Π½ΠΎΠΉ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ:

  1. Если Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ являСтся массивом, Π² lax Ρ€Π΅ΠΆΠΈΠΌΠ΅ происходит автоматичСская распаковка массива
  2. Если Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π½Π΅ являСтся JSON ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ, Π² strict Ρ€Π΅ΠΆΠΈΠΌΠ΅ запрос Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ΡΡ ошибкой. Π’ lax Ρ€Π΅ΠΆΠΈΠΌΠ΅ для этого значСния возвращаСтся пустой Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ выраТСния — конкатСнация Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ² для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ значСния ΠΈΠ· Π²Ρ…ΠΎΠ΄Π½ΠΎΠΉ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€:

{
    "profile": {
        "id": 123,
        "name": "Amos"
    },
    "friends": [
        {
            "name": "Jim"
        },
        {
            "name": "Alex"
        }
    ]
}
laxstrict
$.profile.*123, "Amos"123, "Amos"
$.friends.*"Jim", "Alex"Ошибка

ΠžΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ ΠΊ элСмСнту массива

JsonPath ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ ΠΊ элСмСнтам массивов: $.friends[1, 3 to last - 1].

Для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ значСния ΠΈΠ· Π²Ρ…ΠΎΠ΄Π½ΠΎΠΉ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ:

  1. Если Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π½Π΅ являСтся массивом, Ρ‚ΠΎ Π² strict Ρ€Π΅ΠΆΠΈΠΌΠ΅ запрос Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ΡΡ ошибкой. Π’ lax Ρ€Π΅ΠΆΠΈΠΌΠ΅ происходит автоматичСская ΠΎΠ±Π΅Ρ€Ρ‚ΠΊΠ° Π² массив
  2. ΠšΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово last замСняСтся Π½Π° послСдний индСкс массива. ИспользованиС last Π²Π½Π΅ обращСния ΠΊ массиву — это ошибка Π² ΠΎΠ±ΠΎΠΈΡ… Ρ€Π΅ΠΆΠΈΠΌΠ°Ρ…
  3. Π’Ρ‹Ρ‡ΠΈΡΠ»ΡΡŽΡ‚ΡΡ ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹Π΅ индСксы. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ· Π½ΠΈΡ… Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ СдинствСнным числом, ΠΈΠ½Π°Ρ‡Π΅ запрос Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ΡΡ ошибкой Π² ΠΎΠ±ΠΎΠΈΡ… Ρ€Π΅ΠΆΠΈΠΌΠ°Ρ…
  4. Если индСкс являСтся Π΄Ρ€ΠΎΠ±Π½Ρ‹ΠΌ числом, ΠΎΠ½ округляСтся Π²Π½ΠΈΠ·
  5. Если индСкс Π²Ρ‹Ρ…ΠΎΠ΄ΠΈΡ‚ Π·Π° Π³Ρ€Π°Π½ΠΈΡ†Ρ‹ массива, Ρ‚ΠΎ Π² strict Ρ€Π΅ΠΆΠΈΠΌΠ΅ запрос Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ΡΡ ошибкой. Π’ lax Ρ€Π΅ΠΆΠΈΠΌΠ΅ Ρ‚Π°ΠΊΠΎΠΉ индСкс игнорируСтся
  6. Если ΡƒΠΊΠ°Π·Π°Π½ ΠΎΡ‚Ρ€Π΅Π·ΠΎΠΊ ΠΈ Π΅Π³ΠΎ стартовый индСкс большС ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠ³ΠΎ индСкса (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ $[20 to 1]), Ρ‚ΠΎ Π² strict Ρ€Π΅ΠΆΠΈΠΌΠ΅ запрос Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ΡΡ ошибкой. Π’ lax Ρ€Π΅ΠΆΠΈΠΌΠ΅ Ρ‚Π°ΠΊΠΎΠΉ ΠΎΡ‚Ρ€Π΅Π·ΠΎΠΊ игнорируСтся.
  7. К Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρƒ Π΄ΠΎΠ±Π°Π²Π»ΡΡŽΡ‚ΡΡ всС элСмСнты ΠΏΠΎ ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΌ индСксам. ΠžΡ‚Ρ€Π΅Π·ΠΊΠΈ Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚ Π² сСбя ΠΎΠ±Π° ΠΊΠΎΠ½Ρ†Π°

ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹:

[
    {
        "name": "Camina",
        "surname": "Drummer"
    },
    {
        "name": "Josephus",
        "surname": "Miller"
    },
    {
        "name": "Bobbie",
        "surname": "Draper"
    },
    {
        "name": "Julie",
        "surname": "Mao"
    }
]
laxstrict
$[0].name"Camina""Camina"
$[1, 2 to 3].name"Josephus", "Bobbie", "Julie""Josephus", "Bobbie", "Julie"
$[last - 2].name"Josephus""Josephus"
$[2, last + 200 to 50].name"Bobbie"Ошибка
$[50].nameΠŸΡƒΡΡ‚ΠΎΠΉ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠžΡˆΠΈΠ±ΠΊΠ°

ΠžΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ ΠΊΠΎ всСм элСмСнтам массива

JsonPath ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ ΠΊΠΎ всСм элСмСнтам массива сразу: $[*].

Для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ значСния ΠΈΠ· Π²Ρ…ΠΎΠ΄Π½ΠΎΠΉ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ:

  1. Если Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π½Π΅ являСтся массивом, Ρ‚ΠΎ Π² strict Ρ€Π΅ΠΆΠΈΠΌΠ΅ запрос Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ΡΡ ошибкой. Π’ lax Ρ€Π΅ΠΆΠΈΠΌΠ΅ происходит автоматичСская ΠΎΠ±Π΅Ρ€Ρ‚ΠΊΠ° Π² массив
  2. К Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρƒ Π΄ΠΎΠ±Π°Π²Π»ΡΡŽΡ‚ΡΡ всС элСмСнты Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ массива

ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹:

[
    {
        "class": "Station",
        "title": "Medina"
    },
    {
        "class": "Corvette",
        "title": "Rocinante"
    }
]
laxstrict
$[*].title"Medina", "Rocinante""Medina", "Rocinante"
lax $[0][*].class"Station"Ошибка

Π Π°Π·Π±Π΅Ρ€Π΅ΠΌ послСдний ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΠΎ шагам:

  1. $[0] Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ элСмСнт массива, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ {"class": "Station", "title": "Medina"}
  2. $[0][*] ΠΎΠΆΠΈΠ΄Π°Π΅Ρ‚ массив Π½Π° Π²Ρ…ΠΎΠ΄, Π½ΠΎ Π±Ρ‹Π» Π΄Π°Π½ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚. ΠŸΡ€ΠΎΠΈΡΡ…ΠΎΠ΄ΠΈΡ‚ автоматичСская ΠΎΠ±Π΅Ρ€Ρ‚ΠΊΠ° Π² массив, получаСтся [ {"class": "Station", "title": "Medina"} ]
  3. Π’Π΅ΠΏΠ΅Ρ€ΡŒ $[0][*] ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒΡΡ ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ всС элСмСнты массива, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ {"class": "Station", "title": "Medina"}
  4. $[0][*].class Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΏΠΎΠ»Π΅ class, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ "Station".

АрифмСтичСскиС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅

ВсС арифмСтичСскиС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ с числами ΠΊΠ°ΠΊ с Double. Π’ΠΎΠ·ΠΌΠΎΠΆΠ½Π° потСря точности ΠΏΡ€ΠΈ вычислСниях.

Π£Π½Π°Ρ€Π½Ρ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ

JsonPath ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ ΡƒΠ½Π°Ρ€Π½Ρ‹ΠΉ + ΠΈ -.

Унарная опСрация примСняСтся ΠΊΠΎ всСм значСниям ΠΈΠ· Π²Ρ…ΠΎΠ΄Π½ΠΎΠΉ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ. Если ΡƒΠ½Π°Ρ€Π½ΠΎΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ ΠΏΠΎΠ΄Π°Ρ‚ΡŒ Π½Π° Π²Ρ…ΠΎΠ΄ Π½Π΅ число, запрос Π·Π°Π²Π΅Ρ€ΡˆΠΈΡ‚ΡΡ ошибкой Π² ΠΎΠ±ΠΎΠΈΡ… Ρ€Π΅ΠΆΠΈΠΌΠ°Ρ….

ΠŸΡ€ΠΈΠΌΠ΅Ρ€:

Запрос strict -$[*] Π·Π°Π²Π΅Ρ€ΡˆΠΈΡ‚ΡΡ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ с Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠΌ -1, -2, -3, -4.

Запрос lax -$ Π·Π°Π²Π΅Ρ€ΡˆΠΈΡ‚ΡΡ с ошибкой, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ $ являСтся массивом, Π° Π½Π΅ числом.

Π‘ΠΈΠ½Π°Ρ€Π½Ρ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ

JsonPath ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Π±ΠΈΠ½Π°Ρ€Π½Ρ‹Π΅ арифмСтичСскиС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ (Π² порядкС убывания ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚Π°):

  1. Π£ΠΌΠ½ΠΎΠΆΠ΅Π½ΠΈΠ΅ *, Π΄Π΅Π»Π΅Π½ΠΈΠ΅ чисСл с ΠΏΠ»Π°Π²Π°ΡŽΡ‰Π΅ΠΉ Ρ‚ΠΎΡ‡ΠΊΠΎΠΉ /, взятиС остатка % (Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΊΠ°ΠΊ функция MOD Π² SQL)
  2. Π‘Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ +, Π²Ρ‹Ρ‡ΠΈΡ‚Π°Π½ΠΈΠ΅ -

ΠŸΠΎΡ€ΡΠ΄ΠΎΠΊ выполнСния ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠΌΠ΅Π½ΡΡ‚ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ скобочки.

Π’ случаС Ссли ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ Π±ΠΈΠ½Π°Ρ€Π½ΠΎΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π½Π΅ являСтся СдинствСнным числом ΠΈΠ»ΠΈ происходит Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π½Π° ноль, запрос Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ΡΡ ошибкой Π² ΠΎΠ±ΠΎΠΈΡ… Ρ€Π΅ΠΆΠΈΠΌΠ°Ρ….

ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹:

  • (1 + 2) * 3 даст 9
  • 1 / 2 даст 0.5
  • 5 % 2 даст 1
  • 1 / 0 Π·Π°Π²Π΅Ρ€ΡˆΠΈΡ‚ΡΡ ошибкой
  • ΠŸΡ€ΠΈ JSON [-32.4, 5.2] запрос $[0] % $[1] даст -1.2
  • ΠŸΡ€ΠΈ JSON [1, 2, 3, 4] запрос lax $[*] + $[*] Π·Π°Π²Π΅Ρ€ΡˆΠΈΡ‚ΡΡ ошибкой, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ выраТСния $[*] — это 1, 2, 3, 4, нСсколько чисСл. Бинарная опСрация Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄Π½ΠΎ число для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ своСго Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°.

БулСвскиС значСния

Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠΈ ΠΎΡ‚ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… языков программирования, Π² JsonPath булСвскими значСниями ΡΡ‡ΠΈΡ‚Π°ΡŽΡ‚ΡΡ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ true (истина) ΠΈ false (лоТь), Π½ΠΎ ΠΈ null (Π½Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΡΡ‚ΡŒ).

JsonPath считаСт всС значСния, ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹Π΅ ΠΈΠ· JSON Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°, Π½Π΅ булСвскими. НапримСр, запрос ! $.is_valid_user (логичСскоС ΠΎΡ‚Ρ€ΠΈΡ†Π°Π½ΠΈΠ΅, ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½Π½ΠΎΠ΅ ΠΊ полю is_valid_user), являСтся синтаксичСски Π½Π΅Π²Π΅Ρ€Π½Ρ‹ΠΌ ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΏΠΎΠ»Π΅ is_valid_user Π½Π΅ являСтся булСвским Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ (Π΄Π°ΠΆΠ΅ Ссли ΠΏΠΎ Ρ„Π°ΠΊΡ‚Ρƒ Π² Π½Π΅ΠΌ хранится true ΠΈΠ»ΠΈ false). ΠŸΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ способ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Ρ‚Π°ΠΊΠΎΠΉ запрос — это явно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ сравнСниС с булСвским Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ $.is_valid_user == false.

ЛогичСскиС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ

JsonPath ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ логичСскиС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с булСвскими значСниями.

АргумСнты всСх логичСских ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΡΠ²Π»ΡΡ‚ΡŒΡΡ СдинствСнным булСвским Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ.
ВсС логичСскиС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‚ булСвскоС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅.

ЛогичСскоС ΠΎΡ‚Ρ€ΠΈΡ†Π°Π½ΠΈΠ΅, !

Π’Π°Π±Π»ΠΈΡ†Π° истинности:

x!x
truefalse
falsetrue
nullnull

ЛогичСскоС И, &&

Π’Π°Π±Π»ΠΈΡ†Π° истинности, ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ столбСц это Π»Π΅Π²Ρ‹ΠΉ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚, пСрвая строка это ΠΏΡ€Π°Π²Ρ‹ΠΉ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚, каТдая ΠΊΠ»Π΅Ρ‚ΠΊΠ° это Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ примСнСния логичСского И с Π»Π΅Π²Ρ‹ΠΌ ΠΈ ΠΏΡ€Π°Π²Ρ‹ΠΌ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°ΠΌΠΈ:

&&truefalsenull
truetruefalsenull
falsefalsefalsefalse
nullnullfalsenull

ЛогичСскоС Π˜Π›Π˜, ||

Π’Π°Π±Π»ΠΈΡ†Π° истинности, ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ столбСц это Π»Π΅Π²Ρ‹ΠΉ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚, пСрвая строка это ΠΏΡ€Π°Π²Ρ‹ΠΉ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚, каТдая ΠΊΠ»Π΅Ρ‚ΠΊΠ° это Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ примСнСния логичСского Π˜Π›Π˜ с Π»Π΅Π²Ρ‹ΠΌ ΠΈ ΠΏΡ€Π°Π²Ρ‹ΠΌ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°ΠΌΠΈ:

||truefalsenull
truetruetruetrue
falsetruefalsenull
nulltruenullnull

ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹:

  • ! (true == true), Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ false
  • (true == true) && (true == false), Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ false
  • (true == true) || (true == false), Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ true

ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ сравнСния

JsonPath Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ сравнСния для Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ:

  • РавСнство, ==
  • НСравСнство, != ΠΈ <>
  • МСньшС ΠΈ мСньшС Π»ΠΈΠ±ΠΎ Ρ€Π°Π²Π½ΠΎ, < ΠΈ <=
  • Π‘ΠΎΠ»ΡŒΡˆΠ΅ ΠΈ большС Π»ΠΈΠ±ΠΎ Ρ€Π°Π²Π½ΠΎ, > ΠΈ >=

ВсС ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ сравнСния Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‚ булСвскоС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. Оба Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ.

Если ΠΏΡ€ΠΈ вычислСнии Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° Π²ΠΎΠ·Π½ΠΈΠΊΠ»Π° ошибка, ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ null. ΠŸΡ€ΠΈ этом Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ JsonPath запроса продолТаСтся.

Для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΈΠ· Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² производится автоматичСская распаковка массивов. ПослС этого для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΏΠ°Ρ€Ρ‹, Π³Π΄Π΅ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ элСмСнт бСрСтся ΠΈΠ· ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Π»Π΅Π²ΠΎΠ³ΠΎ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°, Π° Π²Ρ‚ΠΎΡ€ΠΎΠΉ элСмСнт ΠΈΠ· ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΏΡ€Π°Π²ΠΎΠ³ΠΎ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°:

  1. ВыполняСтся сравнСниС элСмСнтов ΠΏΠ°Ρ€Ρ‹
  2. Если ΠΏΡ€ΠΈ сравнСнии Π²ΠΎΠ·Π½ΠΈΠΊΠ»Π° ошибка, устанавливаСтся Ρ„Π»Π°Π³ ERROR
  3. Если Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ сравнСния это истина, устанавливаСтся Ρ„Π»Π°Π³ FOUND
  4. Если ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Ρ„Π»Π°Π³ΠΎΠ² ERROR ΠΈΠ»ΠΈ FOUND установлСн ΠΈ запрос исполняСтся Π² lax Ρ€Π΅ΠΆΠΈΠΌΠ΅, большС Π½ΠΈΠΊΠ°ΠΊΠΈΠ΅ ΠΏΠ°Ρ€Ρ‹ Π½Π΅ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°ΡŽΡ‚ΡΡ

Если послС рассмотрСния ΠΏΠ°Ρ€:

  1. УстановлСн Ρ„Π»Π°Π³ ERROR, ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ null
  2. УстановлСн Ρ„Π»Π°Π³ FOUND, ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ true
  3. Π˜Π½Π°Ρ‡Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ false

МоТно ΡΠΊΠ°Π·Π°Ρ‚ΡŒ Ρ‡Ρ‚ΠΎ Π΄Π°Π½Π½Ρ‹ΠΉ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ рассматриваСт всС ΠΏΠ°Ρ€Ρ‹ ΠΈΠ· Π΄Π΅ΠΊΠ°Ρ€Ρ‚ΠΎΠ²ΠΎΠ³ΠΎ произвСдСния Π»Π΅Π²ΠΎΠ³ΠΎ ΠΈ ΠΏΡ€Π°Π²ΠΎΠ³ΠΎ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°, ΠΏΡ‹Ρ‚Π°ΡΡΡŒ Π½Π°ΠΉΡ‚ΠΈ Ρ‚Ρƒ, сравнСниС ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π²Π΅Ρ€Π½Π΅Ρ‚ истину.

Π‘Ρ€Π°Π²Π½Π΅Π½ΠΈΠ΅ элСмСнтов Π² ΠΏΠ°Ρ€Π΅ производится ΠΏΠΎ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΏΡ€Π°Π²ΠΈΠ»Π°ΠΌ:

  1. Если Π»Π΅Π²Ρ‹ΠΉ ΠΈΠ»ΠΈ ΠΏΡ€Π°Π²Ρ‹ΠΉ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ ΡΠ²Π»ΡΡŽΡ‚ΡΡ массивом ΠΈΠ»ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ, сравнСниС Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ΡΡ с ошибкой
  2. null == null Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ истину
  3. Π’ΠΎ всСх ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Ρ… случаях Ссли ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² null, возвращаСтся лоТь
  4. Если Π»Π΅Π²Ρ‹ΠΉ ΠΈ ΠΏΡ€Π°Π²Ρ‹ΠΉ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ Ρ€Π°Π·Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ², сравнСниС Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ΡΡ с ошибкой
  5. Π‘Ρ‚Ρ€ΠΎΠΊΠΈ ΡΡ€Π°Π²Π½ΠΈΠ²Π°ΡŽΡ‚ΡΡ ΠΏΠΎΠ±Π°ΠΉΡ‚ΠΎΠ²ΠΎ
  6. true считаСтся большС false
  7. Числа ΡΡ€Π°Π²Π½ΠΈΠ²Π°ΡŽΡ‚ΡΡ с Ρ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒΡŽ 1e-20

ΠŸΡ€ΠΈΠΌΠ΅Ρ€:

Для ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° рассмотрим JSON Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚

{
    "left": [1, 2],
    "right": [4, "Inaros"]
}

ΠΈ Ρ€Π°Π·Π±Π΅Ρ€Π΅ΠΌ ΠΏΠΎ шагам Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ запроса lax $.left < $.right:

  1. АвтоматичСская распаковка массивов Π² Π»Π΅Π²ΠΎΠΌ ΠΈ ΠΏΡ€Π°Π²ΠΎΠΌ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π΅. Π’ качСствС Π»Π΅Π²ΠΎΠ³ΠΎ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ 1, 2, Π² качСствС ΠΏΡ€Π°Π²ΠΎΠ³ΠΎ 4, "Iranos"
  2. РассматриваСм ΠΏΠ°Ρ€Ρƒ (1, 4). Π‘Ρ€Π°Π²Π½Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΈΡ‚ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ, 1 < 4 это истина. УстанавливаСм Ρ„Π»Π°Π³ FOUND
  3. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ происходит Π² lax Ρ€Π΅ΠΆΠΈΠΌΠ΅ ΠΈ установлСн Ρ„Π»Π°Π³ FOUND, большС Π½ΠΈΠΊΠ°ΠΊΠΈΠ΅ ΠΏΠ°Ρ€Ρ‹ ΠΌΡ‹ Π½Π΅ рассматриваСм
  4. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ установлСн Ρ„Π»Π°Π³ FOUND, ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ истину

Π Π°Π·Π±Π΅Ρ€Π΅ΠΌ Ρ‚ΠΎΡ‚ ΠΆΠ΅ запрос, Π½ΠΎ Π² Π΄Ρ€ΡƒΠ³ΠΎΠΌ Ρ€Π΅ΠΆΠΈΠΌΠ΅ выполнСния: strict $.left < $.right:

  1. АвтоматичСская распаковка массивов Π² Π»Π΅Π²ΠΎΠΌ ΠΈ ΠΏΡ€Π°Π²ΠΎΠΌ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π΅. Π’ качСствС Π»Π΅Π²ΠΎΠ³ΠΎ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ 1, 2,

JSON — ΠžΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹

ΠžΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ JSON ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ΡΡ Π²Π½ΡƒΡ‚Ρ€ΠΈ Ρ„ΠΈΠ³ΡƒΡ€Π½Ρ‹Ρ… скобок { }.

ΠžΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ JSON Π·Π°ΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ΡΡ Π² Π²ΠΈΠ΄Π΅ ΠΏΠ°Ρ€ «ΠΊΠ»ΡŽΡ‡/Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅«.

ΠšΠ»ΡŽΡ‡ΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ строками, Π° значСния β€” допустимых Π² JSON Ρ‚ΠΈΠΏΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ… (строка, число, ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, массив, boolean ΠΈΠ»ΠΈ null).

ΠšΠ»ΡŽΡ‡ΠΈ ΠΈ значСния Ρ€Π°Π·Π΄Π΅Π»ΡΡŽΡ‚ΡΡ Π΄Π²ΠΎΠ΅Ρ‚ΠΎΡ‡ΠΈΠ΅ΠΌ.

КаТдая ΠΏΠ°Ρ€Π° «ΠΊΠ»ΡŽΡ‡/Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅» раздСляСтся запятой.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€:


{ "name":"John", "age":30, "car":null }

Доступ ΠΊ значСниям ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°

Доступ ΠΊ значСниям ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ записи с Ρ‚ΠΎΡ‡ΠΊΠΎΠΉ (.):


myObj = { "name":"John", "age":30, "car":null };
x = myObj.name;

Π’Π°ΠΊΠΆΠ΅ доступ ΠΊ значСниям ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ записи с ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π½Ρ‹ΠΌΠΈ скобками [ ]:


myObj = { "name":"John", "age":30, "car":null };
x = myObj["name"];

ΠžΠ±Ρ…ΠΎΠ΄ свойств ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ±ΠΎΠΉΡ‚ΠΈ всС свойства ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ†ΠΈΠΊΠ» for-in:


myObj = { "name":"John", "age":30, "car":null };
for (x in myObj) {
    document.getElementById("demo").innerHTML += x;
}

Π§Ρ‚ΠΎΠ±Ρ‹ Π²Π½ΡƒΡ‚Ρ€ΠΈ Ρ†ΠΈΠΊΠ»Π° for-in ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ ΠΊ значСниям свойств, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ запись с ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π½Ρ‹ΠΌΠΈ скобками:


myObj = { "name":"John", "age":30, "car":null };
for (x in myObj) {
    document.getElementById("demo").innerHTML += myObj[x];
}

Π’Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ JSON

Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ свойств ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° JSON ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ JSON.


myObj = {
    "name":"John",
    "age":30,
    "cars": {
        "car1":"Ford",
        "car2":"BMW",
        "car3":"Fiat"
    }
 }

ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ ΠΊ Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹ΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌ JSON ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ записи с Ρ‚ΠΎΡ‡ΠΊΠΎΠΉ ΠΈΠ»ΠΈ с ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π½Ρ‹ΠΌΠΈ скобками:


x = myObj.cars.car2;
// ΠΈΠ»ΠΈ
x = myObj.cars["car2"];

ИзмСнСниС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ любоС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° JSON, ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ запись с Ρ‚ΠΎΡ‡ΠΊΠΎΠΉ:


myObj.cars.car2 = "Mercedes";

Π’Π°ΠΊΠΆΠ΅, для измСнСния значСния ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° JSON, ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ запись с ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π½Ρ‹ΠΌΠΈ скобками:


myObj.cars["car2"] = "Mercedes";

Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅ свойств ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°

Π§Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ свойство ΠΈΠ· ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° JSON, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово delete:


delete myObj.cars.car2;

JSON — ΠœΠ°ΡΡΠΈΠ²Ρ‹ Π’Π²Π΅Ρ€Ρ… JSON — Π’ΠΈΠΏΡ‹ Π΄Π°Π½Π½Ρ‹Ρ…

Бинтаксис JSON | WebReference

JSON Ρ…Ρ€Π°Π½ΠΈΡ‚ Π΄Π°Π½Π½Ρ‹Π΅ Π² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°Ρ… ΠΈ массивах. Бинтаксис JSON ΠΎΡ‚Ρ€Π°ΠΆΠ°Π΅Ρ‚ ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ΡΡ.

ΠžΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ JSON

ΠžΠ±ΡŠΠ΅ΠΊΡ‚ JSON β€” это нСупорядочСнный Π½Π°Π±ΠΎΡ€ ΠΏΠ°Ρ€ имя/Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, вставлСнных ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ„ΠΈΠ³ΡƒΡ€Π½Ρ‹Ρ… скобок { }.

Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ artistname β€” это имя, Π° Deep Purple β€” Π΅Π³ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅.

{ "artistname" : "Deep Purple" }

ΠžΠ±ΡŠΠ΅ΠΊΡ‚ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ ноль ΠΈΠ»ΠΈ большС ΠΏΠ°Ρ€ имя/Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. НСсколько ΠΏΠ°Ρ€ Ρ€Π°Π·Π΄Π΅Π»ΡΡŽΡ‚ΡΡ запятыми. Π’ΠΎΡ‚ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½Ρ‹Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹.

{ }

{ "artistname" : "Deep Purple" }

{ 
  "artistname" : "Deep Purple", 
  "formed" : "1968" 
}

{
  "artistname" : "Deep Purple", 
  "formed" : "1968",
  "origin" : "Π₯Π΅Ρ€Ρ‚Ρ„ΠΎΡ€Π΄, ВСликобритания"
}

Π’ JSON имя β€” это строка. Π•Π³ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, массив, число, строка, true, false ΠΈΠ»ΠΈ null.

Π’ ΠΏΡ€ΠΈΠ²Π΅Π΄Ρ‘Π½Π½Ρ‹Ρ… Π²Ρ‹ΡˆΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°Ρ… значСния ΡΠ²Π»ΡΡŽΡ‚ΡΡ строками.

ΠœΠ°ΡΡΠΈΠ²Ρ‹ JSON

Массив JSON β€” это упорядочСнный Π½Π°Π±ΠΎΡ€ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ позволяСт Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ список Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ. Массив начинаСтся с Π»Π΅Π²ΠΎΠΉ ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π½ΠΎΠΉ скобки [ ΠΈ Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ΡΡ ΠΏΡ€Π°Π²ΠΎΠΉ ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π½ΠΎΠΉ скобкой ]. Π•Π³ΠΎ значСния Ρ€Π°Π·Π΄Π΅Π»ΡΡŽΡ‚ΡΡ запятой.

Π’ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ массива исполнитСлСй.

{
  "artists" : [
    { 
      "artistname" : "Deep Purple",
      "formed" : "1968"
    },
    { 
      "artistname" : "Joe Satriani",
      "born" : "1956" 
    },
    { 
      "artistname" : "Maroon 5",
      "formed" : "1994" 
    }
  ]
}

ΠŸΡ€ΠΎΠ±Π΅Π»Ρ‹

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ±Π΅Π»Ρ‹, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ваши JSON-Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Ρ‹ Π±ΠΎΠ»Π΅Π΅ Ρ‡ΠΈΡ‚Π°Π±Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ. ЀактичСски это согласуСтся с Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎΠΌ (Ссли Π½Π΅ всСми) языками программирования.

МоТно Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ ΠΏΡ€ΠΎΠ±Π΅Π»Ρ‹, Ρ‚Π°Π±ΡƒΠ»ΡΡ†ΠΈΡŽ, пСрСносы строк ΠΈΠ»ΠΈ символов для ΠΏΠΎΠ²Ρ‹ΡˆΠ΅Π½ΠΈΡ читаСмости Π²Π°ΡˆΠΈΡ… Ρ„Π°ΠΉΠ»ΠΎΠ². Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, допустимо Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Ρ‚Π°ΠΊ.

{
  "artists" : [
    { "artistname" : "Deep Purple", "formed" : "1968" },
    { "artistname" : "Joe Satriani", "born" : "1956" },
    { "artistname" : "Maroon 5", "formed" : "1994" }
  ]
}

Или Ρ‚Π°ΠΊ.

{
  "artists" : [
    { 
      "artistname" : "Deep Purple",
      "formed" : "1968"
    },
    { 
      "artistname" : "Joe Satriani",
      "born" : "1956" 
    },
    { 
      "artistname" : "Maroon 5",
      "formed" : "1994" 
    }
  ]
}

Π­Ρ‚ΠΈ Π΄Π²Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° содСрТат ΠΎΠ΄Π½ΠΈ ΠΈ Ρ‚Π΅ ΠΆΠ΅ Π΄Π°Π½Π½Ρ‹Π΅ ΠΈ простоС Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ±Π΅Π»ΠΎΠ² Π½Π° Π΄Π°Π½Π½Ρ‹Π΅ Π½ΠΈΠΊΠ°ΠΊ Π½Π΅ влияСт.

Однако, Ссли Π² строкС Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠ±Π΅Π» Π²Π½ΡƒΡ‚Ρ€ΠΈ Π΄Π²ΠΎΠΉΠ½Ρ‹Ρ… ΠΊΠ°Π²Ρ‹Ρ‡Π΅ΠΊ, Ρ‚ΠΎ это ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ Π΄Π°Π½Π½Ρ‹Π΅.

Π’Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅

Π‘ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ JSON-Ρ„Π°ΠΉΠ»ΠΎΠ² хранят ΠΌΠ½ΠΎΠ³ΠΎ Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ…, Ρ‡Ρ‚ΠΎ обусловлСно ΠΈΡ… структурой. К ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ, Ρƒ нас ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ массив исполнитСлСй, Π΅Π³ΠΎ имя — artists, Π° Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅Β β€” массив, содСрТащий свСдСния ΠΎ Ρ€Π°Π·Π½Ρ‹Ρ… исполнитСлях. Π£ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ исполнитСля ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ свой массив альбомов, ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ с Ρ€Π°Π·Π½ΠΎΠΉ ΠΏΠ°Ρ€ΠΎΠΉ имя/Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅.

{
  "artists" : [
    {
      "artistname" : "Deep Purple",
      "formed" : "1968",
      "albums" : [
        {
          "albumname" : "Machine Head",
          "year" : "1972",
          "genre" : "Π ΠΎΠΊ"
        },
        {
          "albumname" : "Stormbringer",
          "year" : "1974",
          "genre" : "Π ΠΎΠΊ"
        }
      ]
    }
  ]
}

Π§Ρ‚ΠΎΠ±Ρ‹ Ρ€Π°ΡΡˆΠΈΡ€ΠΈΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹ΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π²ΠΎΠ·ΡŒΠΌΡ‘ΠΌ Ρ‚Ρ€Ρ‘Ρ… исполнитСлСй.

{
  "artists" : [
    {
      "artistname" : "Deep Purple",
      "formed" : "1968",
      "albums" : [
        {
          "albumname" : "Machine Head",
          "year" : "1972",
          "genre" : "Π ΠΎΠΊ"
        },
        {
          "albumname" : "Stormbringer",
          "year" : "1974",
          "genre" : "Π ΠΎΠΊ"
        }
      ]
    },
    {
      "artistname" : "Joe Satriani",
      "born" : "1956",
      "albums" : [
        {
          "albumname" : "Flying in a Blue Dream",
          "year" : "1989",
          "genre" : "Π˜Π½ΡΡ‚Ρ€ΡƒΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½Ρ‹ΠΉ Ρ€ΠΎΠΊ"
        },
        {
          "albumname" : "The Extremist",
          "year" : "1992",
          "genre" : "Π˜Π½ΡΡ‚Ρ€ΡƒΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½Ρ‹ΠΉ Ρ€ΠΎΠΊ"
        },
        {
          "albumname" : "Shockwave Supernova",
          "year" : "2015",
          "genre" : "Π˜Π½ΡΡ‚Ρ€ΡƒΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½Ρ‹ΠΉ Ρ€ΠΎΠΊ"
        }
      ]
    },
    {
      "artistname" : "Snoop Dogg",
      "born" : "1971",
      "albums" : [
        {
          "albumname" : "Tha Doggfather",
          "year" : "1996",
          "genre" : "Гангста-рэп"
        },
        {
          "albumname" : "Snoopified",
          "year" : "2005",
          "genre" : "Гангста-рэп"
        }
      ]
    }
  ]
}

Автор ΠΈ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Ρ‹

Автор: Π™Π΅Π½ Диксон

ПослСднСС измСнСниС: 11.10.2019

Π Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Ρ‹: Π’Π»Π°Π΄ ΠœΠ΅Ρ€ΠΆΠ΅Π²ΠΈΡ‡

JSON Schema. Π‘Ρ‹Ρ‚ΡŒ ΠΈΠ»ΠΈ Π½Π΅ Π±Ρ‹Ρ‚ΡŒ? / Π₯Π°Π±Ρ€

АрхитСктура: искусство Π΄Π΅Π»Π°Ρ‚ΡŒ излишнСС Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹ΠΌ.

Π€Ρ€Π΅Π΄Π΅Ρ€ΠΈΠΊ ΠšΠΈΡΠ»Π΅Ρ€

Ни для ΠΊΠΎΠ³ΠΎ Π΄Π°Π²Π½ΠΎ ΡƒΠΆΠ΅ Π½Π΅ сСкрСт, Ρ‡Ρ‚ΠΎ для любого web-сСрвиса Π½Π° ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π΅ SOAP с сообщСниями Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ XML Π²Π΅Ρ€Π½Ρ‹ΠΌ ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€Π΅Π½Π½Ρ‹ΠΌ Π²Ρ€Π΅ΠΌΠ΅Π½Π΅ΠΌ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ΠΌ являСтся ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° XML Schema (xsd-схСмы), ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‰Π΅ΠΉ Ρ‚ΠΈΠΏΡ‹ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ структуру XML сообщСний. ΠŸΡ€ΠΈ этом ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π΅ Ρƒ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² сущСствуСт явноС прСимущСство: Ρƒ Π½ΠΈΡ… Π΅ΡΡ‚ΡŒ строгиС стандартизированныС ΠΏΡ€Π°Π²ΠΈΠ»Π° ΠΏΠΎ структурС сообщСний, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π·Π°Π΄Π°Π½Ρ‹ Π² схСмС, число ΠΏΡ€Π°Π²ΠΈΠ» ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ, ΠΈ ΠΎΠ½ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ любого Π½ΠΎΠ²ΠΎΠ³ΠΎ сообщСния Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ XML.

Но Ρ‚Π°ΠΊΠΆΠ΅ извСстно, Ρ‡Ρ‚ΠΎ язык XML потСснился языком Ρ€Π°Π·ΠΌΠ΅Ρ‚ΠΊΠΈ JSON (JavaScript Object Notation) Π² Π²ΠΈΠ΄Ρƒ Π΅Π³ΠΎ большСй тяТСловСсности (тяТСловСсности XML), Π° Ρ‚Π°ΠΊΠΆΠ΅ Π² Π²ΠΈΠ΄Ρƒ распространСния Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π½ΠΎΠ³ΠΎ стиля REST (REpresentational State Transfer) Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ обСспСчСния для распрСдСлСнных систСм. Π₯отя сам REST-ΡΡ‚ΠΈΠ»ΡŒ Π½Π΅ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ использования JSON (ΠΎΠ½ Π²ΠΎΠΎΠ±Ρ‰Π΅, ΠΌΠΎΠΆΠ½ΠΎ ΡΠΊΠ°Π·Π°Ρ‚ΡŒ, Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚, Π° Β«Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΠ΅Ρ‚Β»), Π½ΠΎ ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ°, Ρ‡Π°Ρ‰Π΅ ΠΏΡ€ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ REST API всС-Ρ‚Π°ΠΊΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ JSON для описания Ρ‚Π΅Π»Π° сообщСний.

Π’Π°ΠΊ Π²ΠΎΡ‚, ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ REST API с JSON–сообщСниями ΠΏΡ€ΠΎΡ‡Π½ΠΎ вошла Π² Тизнь ИВ Π² России (ΠΈ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρƒ нас), хотя ΠΎΠΏΡ‹Ρ‚ ΠΏΡ€ΠΈ этом ΠΏΠΎ описанию структуры сообщСний Π² Π²ΠΈΠ΄Π΅ XML Schema, Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΡƒΠΏΡ€ΠΎΡΡ‚ΠΈΠ²ΡˆΠΈΠΉ Тизнь Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² web-слуТб Π² своС врСмя, ΡƒΠΏΠΎΡ€Π½ΠΎ игнорируСтся Π² случаС c JSON–сообщСниями. Но Π½Π΅ всСми, Ρ‡Ρ‚ΠΎ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π΅ Ρ€Π°Π΄ΠΎΠ²Π°Ρ‚ΡŒ.

Когда Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ, Π·Π½Π°ΠΊΠΎΠΌΡ‹Π΅ с XML Schema, ΡΡ‚ΠΎΠ»ΠΊΠ½ΡƒΠ»ΠΈΡΡŒ с Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒΡŽ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π· Π·Π°Π½ΠΎΠ²ΠΎ ΠΈΠ·ΠΎΠ±Ρ€Π΅Ρ‚Π°Ρ‚ΡŒ вСлосипСд с Ρ€Π°Π·Π±ΠΎΡ€ΠΎΠΌ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² ΠΈ ΠΏΠ΅Ρ€Π΅ΠΈΠ·ΠΎΠ±Ρ€Π΅Ρ‚Π°Ρ‚ΡŒ Π»ΠΎΠ³ΠΈΠΊΡƒ Π²Π°Π»ΠΈΠ΄Π°Ρ†ΠΈΠΈ, сформировался Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½Ρ‹ΠΉ Π΄Ρ€Π°Ρ„Ρ‚ JSON Schema. Он доступСн ΠΏΠΎ адрСсу json-schema.org, Π° Ρ‚Π°ΠΊΠΆΠ΅ ряд Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² ΠΏΠΎ истории ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ² использования. И нСсмотря Π½Π° Ρ‚ΠΎ Ρ‡Ρ‚ΠΎ ΠΎΠ½ публикуСтся Π² статусС Β«draftΒ», Π΅Π³ΠΎ Π΄Π°Π²Π½ΠΎ ΡƒΠΆΠ΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ всС популярныС ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Π½Π° Ρ€Π°Π·Π½Ρ‹Ρ… языках.

Π‘Π°ΠΌΠ° JSON Schema прСдоставляСт мСньшС возмоТностСй ΠΏΠΎ структуризации сообщСний, Ρ‡Π΅ΠΌ XML Schema. Π’ΠΎ, Ρ‡Ρ‚ΠΎ Π»Π΅Π³ΠΊΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΏΠΈΡΠ°Ρ‚ΡŒ Ρ‡Π΅Ρ€Π΅Π· XML Schema, Π½Π΅ всСгда Π±ΡƒΠ΄Π΅Ρ‚ Ρ‚Ρ€ΠΈΠ²ΠΈΠ°Π»ΡŒΠ½ΠΎΠΉ Π·Π°Π΄Π°Ρ‡Π΅ΠΉ ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΠΈΡ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ JSON Schema, Ссли Π²ΠΎΠΎΠ±Ρ‰Π΅ это Π±ΡƒΠ΄Π΅Ρ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ. Но здСсь ΠΆΠ΅ я Π±Ρ‹ Π΄Π°Π½Π½Ρ‹ΠΉ Ρ„Π°ΠΊΡ‚ стала Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ ΠΈ ΠΊΠ°ΠΊ прСимущСство. ΠŸΠΎΡ‡Π΅ΠΌΡƒ?

Π˜Π·Π²Π΅ΡΡ‚Π½ΠΎ, Ρ‡Ρ‚ΠΎ Ρ‡Π΅ΠΌ ΠΏΡ€ΠΎΡ‰Π΅ ΠΈ Π»ΠΈΠ½Π΅ΠΉΠ½Π΅Π΅ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ Ρ€Π°Π±ΠΎΡ‚Ρ‹ систСмы, Ρ‚Π΅ΠΌ ΠΎΠ½Π° ΠΈ Π½Π°Π΄Π΅ΠΆΠ½Π΅Π΅, Ρ‡Ρ‚ΠΎ Ρ‡Π΅ΠΌ ΠΏΡ€ΠΎΡ‰Π΅ структура Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°, Ρ‚Π΅ΠΌ Π»Π΅Π³Ρ‡Π΅ ΠΎΠ½ для восприятия ΠΈ Ρ‚.Π΄.

НС ΠΌΠΎΠ³Ρƒ ΡƒΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π΅ ΠΏΡ€ΠΎΡ†ΠΈΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ: «Всё гСниальноС просто, ΠΈ всё простоС гСниально». И Ссли Π½Π΅ удаСтся с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ схСмы ΠΎΠΏΠΈΡΠ°Ρ‚ΡŒ ΡΠ»ΠΎΠΆΠ½ΡƒΡŽ структуру Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π° ΠΈ мноТСство допустимых Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ², Ρ‚ΠΎ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, стоит ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Π² сторону упрощСния самой структуры ΠΈ Π»ΠΎΠ³ΠΈΠΊΠΈ формирования этого Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°?

ΠŸΡ€Π΅Π΄ΠΈΡΠ»ΠΎΠ²ΠΈΠ΅

Π˜Ρ‚Π°ΠΊ, ΠΎ Ρ‡Π΅ΠΌ ΠΆΠ΅ эта ΡΡ‚Π°Ρ‚ΡŒΡ?

Π― Π±Ρ‹ Ρ…ΠΎΡ‚Π΅Π»Π° ΠΏΡ€ΠΈΠ²Π»Π΅Ρ‡ΡŒ большС внимания ΠΊ прСимущСствам описания ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Π΅ΠΌΡ‹Ρ… JSON сообщСний схСмой JSON Schema. НСсмотря Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Β«Π½Π° Π²Ρ…ΠΎΠ΄Π΅Β» Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° REST API Π±Π΅Π· ΠΊΠ°ΠΊΠΎΠΉ-Π»ΠΈΠ±ΠΎ JSON-схСмы всСгда ΠΏΡ€ΠΎΡ‰Π΅ ΠΈ быстрСС, Π½ΠΎ с ростом систСмы, Π΅Π΅ отсутствиС Ρ‚Π°ΠΊ ΠΈΠ»ΠΈ ΠΈΠ½Π°Ρ‡Π΅ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ ΡƒΠ΄ΠΎΡ€ΠΎΠΆΠ°Π½ΠΈΡŽ сопровоТдСния ΠΈ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ систСмы. Π’Π°ΠΊΠΆΠ΅ любая ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ ΠΏΡ€ΠΎΡ€Π°Π±ΠΎΡ‚ΠΊΠ° структуры сообщСний способствуСт Π±ΠΎΠ»Π΅Π΅ качСствСнной ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΎΠ±ΠΌΠ΅Π½Π° сообщСниями, Π±Π΅Π· лишнСго дублирования ΠΏΡ€ΠΈ ΠΎΠ±ΠΌΠ΅Π½Π΅ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ ΠΈ ΠΎΠ±Ρ‰ΠΈΠΌΠΈ ΠΏΡ€Π°Π²ΠΈΠ»Π°ΠΌΠΈ ΠΈΡ… ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ.

Π’Π°ΠΊΠΆΠ΅ Π² цСлях распространСния ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ Π² русскоязычном сообщСствС ΠΎ возмоТностях JSON Schema ΠΈ ΠΏΡ€Π°Π²ΠΈΠ»Π°Ρ… Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π½Π΅ΠΉ я подСлюсь своим Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ ΠΎΠΏΡ‹Ρ‚ΠΎΠΌ Π½Π° ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹Ρ… ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°Ρ… Π² Ρ€Π°ΠΌΠΊΠ°Ρ… Π΄Π°Π½Π½ΠΎΠΉ ΡΡ‚Π°Ρ‚ΡŒΠΈ.

ΠŸΠΎΡΡ‚Π°Π½ΠΎΠ²ΠΊΠ° Π·Π°Π΄Π°Ρ‡ΠΈ

ΠŸΠ΅Ρ€Π΅Π΄ Ρ‚Π΅ΠΌ ΠΊΠ°ΠΊ ΠΏΡ€ΠΈΡΡ‚ΡƒΠΏΠΈΡ‚ΡŒ ΠΊ ΠΈΠ·ΡƒΡ‡Π΅Π½ΠΈΡŽ JSON ΠΈ JSON Schema, ΠΎΠΏΠΈΡˆΡƒ Π·Π°Π΄Π°Ρ‡Ρƒ, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ всС ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ Π΄Π°Π»Π΅Π΅.

Рассмотрим Ρ€ΠΎΠ»Π΅Π²ΡƒΡŽ модСль управлСния Π² ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ. ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅ΠΌ, Ρ‡Ρ‚ΠΎ ΡΠΏΡ€Π°Π²ΠΎΡ‡Π½ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΏΠΎ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΉ Ρ€ΠΎΠ»Π΅Π²ΠΎΠΉ ΠΌΠΎΠ΄Π΅Π»ΠΈ ΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±ΡƒΠ΄Π΅ΠΌ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ Π² зависимыС систСмы Π² сообщСниях Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ JSON посрСдством Π²Ρ‹Π·ΠΎΠ²Π° REST-сСрвиса.

ОписаниС Π·Π°Π΄Π°Ρ‡ΠΈ:

Π’ ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ Π΅ΡΡ‚ΡŒ сотрудники, ΠΈΠΌ часто приходится Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ Π² Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… систСмах. ΠŸΡ€ΠΈ этом ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ доступа (ΠΏΠΎΠ»Π½ΠΎΠΌΠΎΡ‡ΠΈΠΉ) ΠΊ Ρ‚Π΅ΠΌ ΠΈΠ»ΠΈ ΠΈΠ½Ρ‹ΠΌ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°ΠΌ систСмы (рСсурсам) для Ρ€Π°Π·Π½Ρ‹Ρ… сотрудников Π² зависимости ΠΎΡ‚ ΠΈΡ… Ρ€ΠΎΠ»ΠΈ Π² ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΡ‚Π»ΠΈΡ‡Π°Ρ‚ΡŒΡΡ, ΠΈ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΏΡ€ΠΈ Π°Π²Ρ‚ΠΎΡ€ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ Π² систСмС.

НапримСр, Π±ΡƒΡ…Π³Π°Π»Ρ‚Π΅Ρ€ (Ρ€ΠΎΠ»ΡŒ) Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ доступ Π½Π° Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ ΠΈ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ (ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ/полномочия) ΠΊ расчСтным листкам (рСсурс) ΠΏΠΎ Π·Π°Ρ€Π°Π±ΠΎΡ‚Π½ΠΎΠΉ ΠΏΠ»Π°Ρ‚Π΅ всСх сотрудников, Π° Ρƒ Π°Π½Π°Π»ΠΈΡ‚ΠΈΠΊΠ° (Ρ€ΠΎΠ»ΡŒ), ΠΊ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ, Π±ΡƒΠ΄Π΅Ρ‚ доступ Π½Π° Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ (опСрация/полномочия) Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠΎ своСму расчСтному листку (рСсурс).

НСобходимо ΡΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈ ΠΎΠΏΠΈΡΠ°Ρ‚ΡŒ Ρ€ΠΎΠ»Π΅Π²ΡƒΡŽ модСль управлСния Π² ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ. ДоступныС Ρ€ΠΎΠ»ΠΈ, Π½Π°Π±ΠΎΡ€ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Ρ… ΠΏΠΎΠ»Π½ΠΎΠΌΠΎΡ‡ΠΈΠΉ ΠΈ рСсурсов Π² систСмС Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ Π΄Ρ€ΡƒΠ³ΠΈΠΌ систСмам ΠΏΠΎ запросу.

Рисунок 1. ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² Ρ€ΠΎΠ»Π΅Π²ΠΎΠΉ ΠΌΠΎΠ΄Π΅Π»ΠΈ

Бпособы описания ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Ρ€ΠΎΠ»Π΅Π²ΠΎΠΉ ΠΌΠΎΠ΄Π΅Π»ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ ΠΎΡ‚Π»ΠΈΡ‡Π°Ρ‚ΡŒΡΡ, Π½ΠΎ нСзависимо ΠΎΡ‚ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Ρ‡Π°Ρ‰Π΅ всСго Π² Ρ€ΠΎΠ»Π΅Π²ΠΎΠΉ ΠΌΠΎΠ΄Π΅Π»ΠΈ Π² Ρ‚Π°ΠΊΠΎΠΌ случаС ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π²Ρ‹Π΄Π΅Π»ΠΈΡ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Π±Π°Π·ΠΎΠ²Ρ‹Π΅ ΡΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΠ΅:

  1. Роль (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€, Π±ΡƒΡ…Π³Π°Π»Ρ‚Π΅Ρ€ ΠΈ Ρ‚.Π΄.).
  2. РСсурс (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚, ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ нСдвиТимости ΠΈ Ρ‚.Π΄.).
  3. ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΡ/полномочия (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΡ€ΠΎΡ‡Π΅ΡΡ‚ΡŒ, Ρ€Π°ΡΠΏΠ΅Ρ‡Π°Ρ‚Π°Ρ‚ΡŒ, ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΈ Ρ‚.Π΄.).

ΠŸΡ€ΠΈ описании Ρ€ΠΎΠ»Π΅Π²ΠΎΠ³ΠΎ доступа (ΠΊΠ°ΠΊ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Ρ… Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ²) ΠΏΡ€ΠΈΠ±Π΅Π³Π°ΡŽΡ‚ ΠΊ созданию дискрСтной ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ доступа Π½Π° основС Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… сущностСй, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

Π’Π°Π±Π»ΠΈΡ†Π° 1. ДискрСтная ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π° доступов.

Π”Π°Π»Π΅Π΅ Π² ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΌΡ‹ ознакомимся сначала с тСорСтичСской ΡΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‰Π΅ΠΉ тСкстового Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° ΠΎΠ±ΠΌΠ΅Π½Π° Π΄Π°Π½Π½Ρ‹ΠΌΠΈ JSON ΠΈ ΠΏΡ€Π°Π²ΠΈΠ»Π°ΠΌΠΈ ΠΈΡ… структурирования с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ JSON Schema, Π° Π² качСствС ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ² Π±ΡƒΠ΄Ρƒ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ΡŒ описаниС сущностСй-справочников для Ρ€ΠΎΠ»Π΅ΠΉ, рСсурсов ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ Π½Π° языкС JSON ΠΈ ΠΈΡ… JSON–схСм Π² Ρ€Π°ΠΌΠΊΠ°Ρ… нашСй поставлСнной Π·Π°Π΄Π°Ρ‡ΠΈ.

JavaScript Object Notation (JSON)

JSON (Π°Π½Π³Π». JavaScript Object Notation) β€” тСкстовый Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ ΠΎΠ±ΠΌΠ΅Π½Π° Π΄Π°Π½Π½Ρ‹ΠΌΠΈ, основанный Π½Π° JavaScript.

ВСория

Π―Π·Ρ‹ΠΊ Ρ€Π°Π·ΠΌΠ΅Ρ‚ΠΊΠΈ JSON Π·Π°Π΄Π°Π΅Ρ‚ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½Ρ‹ΠΉ Π½Π°Π±ΠΎΡ€ Ρ‚ΠΈΠΏΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ…. Для ΠΏΠ°Ρ€Ρ‹ {β€œΠΊΠ»ΡŽΡ‡β€: Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅} для Β«ΠΊΠ»ΡŽΡ‡Π°Β» всСгда ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ Ρ‚ΠΈΠΏ string, для «значСния» ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠΌΡ‹ Ρ‚ΠΈΠΏΡ‹: string, number, object (Ρ‚ΠΈΠΏ JSON), array, boolean (true ΠΈΠ»ΠΈ false) ΠΈ null.

Рисунок 2. Π’ΠΈΠΏΡ‹ Π΄Π°Π½Π½Ρ‹Ρ… JSON

На рисункС ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Ρ‹ Π±Π°Π·ΠΎΠ²Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹ ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ ΠΈΡ… использования. Достаточно просто всС, Π½Π° ΠΌΠΎΠΉ взгляд.

Бинтаксис JSON являСтся подмноТСством синтаксиса JavaScript, Π³Π΄Π΅:

  1. Π”Π°Π½Π½Ρ‹Π΅ Π·Π°ΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ΡΡ Π² Π²ΠΈΠ΄Π΅ ΠΏΠ°Ρ€ {β€œΠΊΠ»ΡŽΡ‡β€: Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅}.
  2. Π”Π°Π½Π½Ρ‹Π΅ Ρ€Π°Π·Π΄Π΅Π»ΡΡŽΡ‚ΡΡ запятыми.
  3. Π’ Ρ„ΠΈΠ³ΡƒΡ€Π½Ρ‹Ρ… скобках Π·Π°ΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ΡΡ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹.
  4. Π’ ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π½Ρ‹Ρ… скобках Π·Π°ΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ΡΡ массивы.
  5. НаимСнования Β«ΠΊΠ»ΡŽΡ‡Π΅ΠΉΒ» рСгистрозависимы.

Рисунок 3. Бинтаксис JSON

ΠŸΡ€Π°ΠΊΡ‚ΠΈΠΊΠ°

Рассмотрим ΠΏΡ€ΠΈΠΌΠ΅Ρ€ справочника Ρ€ΠΎΠ»Π΅ΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ Π² сСрвисС:

Рисунок 4. ОписаниС справочника Ρ€ΠΎΠ»Π΅ΠΉ Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ json

Из ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° Π²ΠΈΠ΄Π½ΠΎ, Ρ‡Ρ‚ΠΎ Π΄Π°ΠΆΠ΅ нСсмотря Π½Π° ΡΡ‚ΠΎΠ»ΡŒ нСбольшоС число Π±Π°Π·ΠΎΠ²Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ², ΠΏΡ€ΠΈ ΠΈΡ… ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΠΈ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ слоТныС структуры сообщСний ΠΏΡ€ΠΈ нСобходимости. Π—Π΄Π΅ΡΡŒ, Π² частности, я ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽ справочник Ρ€ΠΎΠ»Π΅ΠΉ Ρ‡Π΅Ρ€Π΅Π· ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ массивов, содСрТащих Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ (Π½Π° рисункС 4 Π²Ρ‹Π΄Π΅Π»Π΅Π½Ρ‹ двумя ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠ°ΠΌΠΈ).

Π’ Ρ‚Π°Π±Π»ΠΈΡ‡Π½ΠΎΠΌ Π²ΠΈΠ΄Π΅ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ срСдств Π²ΠΈΠ·ΡƒΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ json-сообщСний справочник ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ прСдставлСн ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

Рисунок 5. Π’ΠΈΠ·ΡƒΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ справочника Ρ€ΠΎΠ»Π΅ΠΉ Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ JSON

Π‘ΠΏΡ€Π°Π²ΠΎΡ‡Π½ΠΈΠΊ, условно говоря, прСдставляСт собой 3 Β«Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹Β» для задания Ρ€ΠΎΠ»Π΅ΠΉ Π² Π³Ρ€ΡƒΠΏΠΏΠ΅ администраторов, Π±ΡƒΡ…Π³Π°Π»Ρ‚Π΅Ρ€ΠΎΠ² ΠΈ Ρ€Π°Π±ΠΎΡ‡ΠΈΡ…. Бостав Β«Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ²Β» ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½, ΠΏΡ€ΠΈ нСобходимости.

Π’ΠΈΠ·ΡƒΠ°Π»ΡŒΠ½ΠΎΠ΅ прСдставлСниС, Π½Π° ΠΌΠΎΠΉ взгляд, ΡƒΠΏΡ€ΠΎΡ‰Π°Π΅Ρ‚ восприятиС тСкстового описания. ΠΠ½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΡƒΡŽ структуру Π·Π°Π΄Π°Π΄ΠΈΠΌ ΠΈ для Π΄Π²ΡƒΡ… Π΄Ρ€ΡƒΠ³ΠΈΡ… справочников. ΠŸΡ€ΠΈΠ²Π΅Π΄Ρƒ Π½ΠΈΠΆΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚Π°Π±Π»ΠΈΡ‡Π½ΠΎΠ³ΠΎ прСдставлСния для справочника ΠΏΠΎΠ»Π½ΠΎΠΌΠΎΡ‡ΠΈΠΉ (ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ) ΠΈ рСсурсов.

Рисунок 6. Π’ΠΈΠ·ΡƒΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ справочника ΠΏΠΎΠ»Π½ΠΎΠΌΠΎΡ‡ΠΈΠΉ Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ JSON

Рисунок 7. Π’ΠΈΠ·ΡƒΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ справочника рСсурсов Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ JSON

Π˜ΡΡ…ΠΎΠ΄Π½Ρ‹Π΅ сообщСния Π² тСкстовом Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ JSON для справочника Ρ€ΠΎΠ»Π΅ΠΉ, рСсурсов ΠΈ ΠΏΠΎΠ»Π½ΠΎΠΌΠΎΡ‡ΠΈΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΊΠ°Ρ‡Π°Ρ‚ΡŒ/ΠΏΡ€ΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΏΠΎ ссылкС.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΏΠ΅Ρ€Π΅ΠΉΠ΄Π΅ΠΌ ΠΊ самому интСрСсному: ΠΊ ΠΈΠ·ΡƒΡ‡Π΅Π½ΠΈΡŽ JSON Schema ΠΈ созданию схСмы ΠΏΠΎΠ΄ наши справочники!

JSON Schema

ВСория

ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ схСма json написана Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ JSON, ΠΎΠ½Π° ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ всС Ρ‚ΠΈΠΏΡ‹ JSON плюс Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅: Ρ‚ΠΈΠΏ integer, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ являСтся ΠΏΠΎΠ΄Ρ‚ΠΈΠΏΠΎΠΌ Ρ‚ΠΈΠΏΠ° number. Π‘Π°ΠΌΠ° схСма являСтся JSON-ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ ΠΈ ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π° для описания Π΄Π°Π½Π½Ρ‹Ρ… Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ JSON. НиТС приводится схСма Ρ‚ΠΈΠΏΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ…, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… ΠΏΡ€ΠΈ создании самой схСмы:

Рисунок 8. Π’ΠΈΠΏΡ‹ Π΄Π°Π½Π½Ρ‹Ρ… JSON Schema

Как Π²ΠΈΠ΄Π½ΠΎ ΠΈΠ· рисунка, для схСмы ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ всС Ρ‚Π΅ ΠΆΠ΅ Ρ‚ΠΈΠΏΡ‹ Π΄Π°Π½Π½Ρ‹Ρ…, Π° Ρ‚Π°ΠΊΠΆΠ΅ всС Ρ‚Π΅ ΠΆΠ΅ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡ‹ синтаксиса, Ρ‡Ρ‚ΠΎ ΠΈ для ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠ³ΠΎ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π° JSON, ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹Π΅ Π½Π° рисункС 3.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ рассмотрим самоС Π²Π°ΠΆΠ½ΠΎΠ΅ β€” ΠΏΡ€Π°Π²ΠΈΠ»Π°, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ Π² схСмС для задания ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ ΠΈ структурирования JSON-сообщСний.

JSON Schema позволяСт:

  1. ΠžΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΡ‚ΡŒ Ρ‚ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ… для элСмСнтов Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π° JSON.
  2. Π’ зависимости ΠΎΡ‚ Ρ‚ΠΈΠΏΠ° провСряСмых Π΄Π°Π½Π½Ρ‹Ρ…, Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠΌΡ‹ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΏΡ€Π°Π²ΠΈΠ»Π° β€” Β«keywordsΒ», начиная с корня схСмы Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π° ΠΈ ΡΠΏΡƒΡΠΊΠ°ΡΡΡŒ ΠΊ ΠΈΡ… Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΠΌ элСмСнтам.

НСкоторыС Β«ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Π΅ слова» ΡΠ²Π»ΡΡŽΡ‚ΡΡ чисто ΠΎΠΏΠΈΡΠ°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ, ΠΊΠ°ΠΊ Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€: Β«titleΒ», Β«descriptionΒ» ΠΈ Π΄Ρ€., ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ просто ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ схСмы. Π”Ρ€ΡƒΠ³ΠΈΠ΅ ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Ρ‹ для ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°: Β«$schemaΒ». Π­Ρ‚ΠΎ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для указания ΠΆΠ΅Π»Π°Π΅ΠΌΠΎΠΉ вСрсии схСмы. Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ этого ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ³ΠΎ слова Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ строкой, ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‰Π΅ΠΉ URI, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€: «$schema»: Β«json-schema.org/draft-04/schema#Β».

Π—Π΄Π΅ΡΡŒ ΠΎΡ‡Π΅Π½ΡŒ Π²Π°ΠΆΠ½ΠΎ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ Π½Π΅ всС вСрсии ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒΡΡ вашим инструмСнтом Ρ€Π°Π±ΠΎΡ‚Ρ‹ со схСмой. Но 4-ΠΉ Π΄Ρ€Π°Ρ„Ρ‚ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ практичСски всС. О послСдних измСнСниях (JSON Schema 2019-09 Release Notes) для Ρ€Π°Π·Π½Ρ‹Ρ… вСрсий ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ·Π½Π°ΠΊΠΎΠΌΠΈΡ‚ΡŒΡΡ ΠΏΠΎ ссылкС json-schema.org/draft/2019-09/release-notes.html.

ΠžΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Π΅ слова ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ нСпосрСдствСнно для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π° JSON. Π˜Ρ… ΠΌΡ‹ сСйчас ΠΈ рассмотрим.

Π’Π°Π±Π»ΠΈΡ†Π° 2. Анализ структуры JSON Schema. ΠšΠ»ΡŽΡ‡Π΅Π²Ρ‹Π΅ слова ΠΈ ΠΈΡ… ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ использования.

ΠœΡ‹ рассмотрСли ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Π΅ слова схСмы JSON, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠ΅ ΠΎΠΏΠΈΡΠ°Ρ‚ΡŒ Π½Π°ΠΌ Π±ΡƒΠ΄ΡƒΡ‰ΡƒΡŽ структуру Π½Π°ΡˆΠΈΡ… сообщСний Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ JSON.

Π—Π΄Π΅ΡΡŒ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π½Π°ΠΉΡ‚ΠΈ большС ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ² использования ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Ρ… слов.

ΠŸΡ€Π°ΠΊΡ‚ΠΈΠΊΠ°

ΠŸΡ€ΠΈ рассмотрСнии ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ² Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½Π½Ρ‹Ρ… JSON-схСм ΠΌΡ‹ поступим Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°ΠΌ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с самими сообщСниями Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ JSON. Π’.Π΅. ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π²ΠΈΠ·ΡƒΠ°Π»ΡŒΠ½ΠΎΠ΅ прСдставлСниС Π² Π΄Ρ€Π΅Π²ΠΎΠ²ΠΈΠ΄Π½ΠΎΠΌ ΠΈ Ρ‚Π°Π±Π»ΠΈΡ‡Π½ΠΎΠΌ Π²ΠΈΠ΄Π΅ для Π½Π°ΡˆΠΈΡ… схСм справочников Ρ€ΠΎΠ»Π΅ΠΉ, рСсурсов ΠΈ ΠΏΠΎΠ»Π½ΠΎΠΌΠΎΡ‡ΠΈΠΉ (ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ), Π° с тСкстом схСм ΠΏΡ€Π΅Π΄Π»Π°Π³Π°ΡŽ ΠΎΠ·Π½Π°ΠΊΠΎΠΌΠΈΡ‚ΡŒΡΡ Π·Π°ΠΈΠ½Ρ‚Π΅Ρ€Π΅ΡΠΎΠ²Π°Π²ΡˆΠΈΡ…ΡΡ Ρ‡ΠΈΡ‚Π°Ρ‚Π΅Π»Π΅ΠΉ ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ Π² git.

НиТС приводится схСма для справочника Ρ€ΠΎΠ»Π΅ΠΉ.

Рисунок 9. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ JSON Schema для справочника Ρ€ΠΎΠ»Π΅ΠΉ

Как ΠΌΡ‹ Π²ΠΈΠ΄ΠΈΠΌ Π½Π° рисункС, схСма прСдставляСт собой JSON-ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΈ описываСт нашС сообщСниС для ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ справочника Ρ€ΠΎΠ»Π΅ΠΉ Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ JSON, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΠ»ΠΎΡΡŒ Π½Π° рисункС 4. На Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ прСдставлСно ΠΊΠ°ΠΊ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ JSON схСмы ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ описан ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ массивов, состоящий ΠΈΠ· ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ².

Π‘Ρ…Π΅ΠΌΡ‹ Π΄Π²ΡƒΡ… Π΄Ρ€ΡƒΠ³ΠΈΡ… справочников (ΠΏΠΎΠ»Π½ΠΎΠΌΠΎΡ‡ΠΈΠΉ ΠΈ рСсурсов) ΠΏΠΎ своСй структурС ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ‡Π½Ρ‹ со схСмой для справочника Ρ€ΠΎΠ»Π΅ΠΉ, поэтому Π½Π΅ Π±ΡƒΠ΄Ρƒ ΠΈΡ… здСсь ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ΡŒ, Π° ΠΏΡ€ΠΈΠ²Π΅Π΄Ρƒ схСму, ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΡΡŽΡ‰ΡƒΡŽ Π² сСбС всС 3 справочника.

К соТалСнию, схСма всСго справочника ΠΏΡ€ΠΈ раскрытии Π½Π΅ помСстится Π½Π° экранС, поэтому рассмотрим Π΅Π΅ Ρ‡Π°ΡΡ‚ΡŒ.

Рисунок 10. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ JSON Schema справочника, ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΡΡŽΡ‰Π΅Π³ΠΎ Π² сСбС справочник Ρ€ΠΎΠ»Π΅ΠΉ, ΠΏΠΎΠ»Π½ΠΎΠΌΠΎΡ‡ΠΈΠΉ ΠΈ рСсурсов

На рисункС ΠΌΡ‹ Π²ΠΈΠ΄ΠΈΠΌ, Ρ‡Ρ‚ΠΎ Ρ‡Π°ΡΡ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² массива справочников ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½Π° с использованиСм ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ³ΠΎ слова Β«anyOfΒ».

Π’Π°ΠΊΠΆΠ΅, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, нагляднСС Π±ΡƒΠ΄Π΅Ρ‚ Ρ‚Π°Π±Π»ΠΈΡ‡Π½ΠΎΠ΅ прСдставлСниС справочника.

Рассмотрим Π΅Ρ‰Π΅ ΠΎΠ΄Π½Ρƒ Π²Π°ΠΆΠ½ΡƒΡŽ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΡŒ нашСй схСмы:

Рисунок 11. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ JSON Schema справочника, ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΡΡŽΡ‰Π΅Π³ΠΎ Π² сСбС справочник Ρ€ΠΎΠ»Π΅ΠΉ, ΠΏΠΎΠ»Π½ΠΎΠΌΠΎΡ‡ΠΈΠΉ ΠΈ рСсурсов Π² Ρ‚Π°Π±Π»ΠΈΡ‡Π½ΠΎΠΌ прСдставлСнии

Из рисунка ΠΌΡ‹ Π²ΠΈΠ΄ΠΈΠΌ, Ρ‡Ρ‚ΠΎ ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΡΡŽΡ‰ΠΈΠΉ справочник Π½Π΅ Π΄ΡƒΠ±Π»ΠΈΡ€ΡƒΠ΅Ρ‚ Π² сСбС ΠΊΠΎΠ΄ ΠΈΠ· Ρ€Π°Π½Π΅Π΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½Ρ‹Ρ… справочников Ρ€ΠΎΠ»Π΅ΠΉ, ΠΏΠΎΠ»Π½ΠΎΠΌΠΎΡ‡ΠΈΠΉ ΠΈ рСсурсов, Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово «$ref».

Π‘ΠΏΡ€Π°Π²ΠΎΡ‡Π½ΠΈΠΊΠΈ, рассматриваСмыС Π² ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°Ρ…, находятся Π² ΠΎΠ΄Π½ΠΎΠΉ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ, Π½ΠΎ, ΠΏΡ€ΠΈ нСобходимости, это ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π½Π΅ ΡΠΎΠ±Π»ΡŽΠ΄Π°Ρ‚ΡŒ, Π° Ρ€Π°Π·ΠΌΠ΅Ρ‰Π°Ρ‚ΡŒ Π² Ρ€Π°Π·Π½Ρ‹Ρ… дирСкториях, ΡƒΠΊΠ°Π·Π°Π² ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ ΠΏΡƒΡ‚ΡŒ ΠΊ Π½ΠΈΠΌ ΠΏΡ€ΠΈ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΈ. Данная Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΎΡ‡Π΅Π½ΡŒ ΠΏΠΎΠ»Π΅Π·Π½Π°, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ позволяСт ΠΏΠ΅Ρ€Π΅ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ€Π°Π½Π΅Π΅ созданныС схСмы, лишь ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Ρ ΠΈΡ… Π² Π½ΡƒΠΆΠ½Ρ‹Π΅ структуры.

На этом ΠΌΠΎΠΉ ΠΎΠ±Π·ΠΎΡ€ JSON ΠΈ JSON Schema я Π·Π°Π²Π΅Ρ€ΡˆΠ°ΡŽ. НадСюсь, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹ΠΉ здСсь ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π» ΠΈ рассмотрСнныС ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹, окаТутся ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ΠΌΠΈ ΠΏΡ€ΠΈ ΠΈΠ·ΡƒΡ‡Π΅Π½ΠΈΠΈ возмоТностСй JSON Sсhema.

ВмСсто Π·Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ

Π”ΡƒΠΌΠ°ΡŽ, ΠΏΠΎΡ€Π° ΠΏΠΎΠ΄Π²ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΈΡ‚ΠΎΠ³ΠΈ. Π’Π°ΠΊ Ρ‡Ρ‚ΠΎ ΠΆΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ JSON Schema Π² ΠΈΡ‚ΠΎΠ³Π΅ Π½Π°ΠΌ ΠΌΠΎΠΆΠ΅Ρ‚ Π΄Π°Ρ‚ΡŒ?

  1. ΠœΠΎΠΆΠ΅Ρ‚ ΡƒΠΏΡ€ΠΎΡΡ‚ΠΈΡ‚ΡŒ Тизнь Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌ ΠΈ ΡƒΠ»ΡƒΡ‡ΡˆΠΈΡ‚ΡŒ ΠΊΠΎΠ΄ ΠΏΠΎ Π²Π°Π»ΠΈΠ΄Π°Ρ†ΠΈΠΈ JSON -сообщСний.
    Π˜Π½Ρ‹ΠΌΠΈ словами, это ΡƒΠΏΡ€ΠΎΡ‰Π΅Π½ΠΈΠ΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ ΠΈ ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΈ ПО.
  2. ΠŸΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ Ρ€Π°Π·Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ сСрвисы, прорабатывая Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Ρ‹ ΠΈ состав Π΄Π°Π½Π½Ρ‹Ρ… с Β«Π·Π°Π΄Π΅Π»ΠΎΠΌΒ» Π½Π° Π±ΡƒΠ΄ΡƒΡ‰Π΅Π΅ Ρ€Π°Π·Π²ΠΈΡ‚ΠΈΠ΅ систСмы.
  3. ΠŸΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² Π² Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ…, ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… Π‘Π”.
  4. JSON-Schema ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠΌΠΎΡ‡ΡŒ ΡΡΠΊΠΎΠ½ΠΎΠΌΠΈΡ‚ΡŒ врСмя Π½Π° тСстировании ΠΈ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ API.
  5. Π£ΠΏΡ€ΠΎΡ‰Π΅Π½ΠΈΠ΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΉ совмСстимости API.
  6. ΠŸΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌΠΈ Π΄Π°Π½Π½Ρ‹Ρ….
  7. Π“ΠΈΠ±ΠΊΡƒΡŽ Π²Π°Π»ΠΈΠ΄Π°Ρ†ΠΈΡŽ ΠΏΡ€ΠΈ Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ JSON Schema Π² run-time со значСниями Π² Β«enumΒ», ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌΡ‹ΠΌΠΈ Π½Π° этапС выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.
    Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ для ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠ³ΠΎ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚Π° ΠΈΠ»ΠΈ workflow со статусами Π² Β«enumΒ» (ΠΏΡ€ΠΈΠΌΠ΅Ρ€ примСнСния ΠΎΡ‚ NtsDK ΠΈ VolCh).
  8. JSON Schema ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½Π° ΠΏΡ€ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ DTO
    (ΠΏΡ€ΠΈΠΌΠ΅Ρ€ использования ΠΎΡ‚ amarkevich)

ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ· нас сам Ρ€Π΅ΡˆΠ°Π΅Ρ‚, Β«Π‘Ρ‹Ρ‚ΡŒ ΠΈΠ»ΠΈ Π½Π΅ Π±Ρ‹Ρ‚ΡŒ JSON SchemaΒ» Π² Π½Π°ΡˆΠΈΡ… IT -ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°Ρ…. Π’Ρ‹ΡˆΠ΅ я ΠΏΡ€ΠΈΠ²Π΅Π»Π° список Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ я ΡΡ‡ΠΈΡ‚Π°ΡŽ ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹ΠΌ прСимущСством примСнСния схСм, ΠΈ Ρ€Π°Π΄ΠΈ Ρ‡Π΅Π³ΠΎ ΡƒΠΆΠ΅ стоит Π·Π°Π΄ΡƒΠΌΠ°Ρ‚ΡŒΡΡ ΠΎ Π΅Π΅ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠΈ Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°Ρ….

Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Ρ‡ΠΈΡ‚Π°Ρ‚Π΅Π»ΠΈ захотят ΠΏΠΎΠΌΠΎΡ‡ΡŒ ΠΌΠ½Π΅ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚ΡŒ этот список?

Π― Π±ΡƒΠ΄Ρƒ ΠΏΡ€ΠΈΠ·Π½Π°Ρ‚Π΅Π»ΡŒΠ½Π° πŸ™‚

Π’Π°ΠΊΠΆΠ΅ ΠΏΡ€ΠΈΠ²Π΅Π΄Ρƒ список ссылок, Π½Π° ΠΌΠΎΠΉ взгляд, ΠΏΠΎΠ»Π΅Π·Π½Ρ‹Ρ… для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с JSON ΠΈ JSON Schema

  1. ΠžΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ источник с ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°ΠΌΠΈ использования ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Ρ… слов схСмы.
  2. Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ с большим числом ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ² использования ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Ρ… слов схСмы.
  3. ΠžΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½Π°Ρ страница стандарта (Π΄Ρ€Π°Ρ„Ρ‚Π°).
  4. Бписок Ρ€Π΅Π»ΠΈΠ·ΠΎΠ² (ΠΏΠΎΠ»Π΅Π·Π½ΠΎ для понимания Π΄ΠΈΠ½Π°ΠΌΠΈΠΊΠΈ развития стандарта).
  5. Онлайн-Π²Π°Π»ΠΈΠ΄Π°Ρ‚ΠΎΡ€ с Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒΡŽ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ Π½ΡƒΠΆΠ½ΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ Π΄Ρ€Π°Ρ„Ρ‚Π° JSON-Schema.
  6. ΠžΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΉ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ JSON Schema
  7. JSON Schema для создания динамичСских интСрфСйсов, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒΡΡ самим Π·Π°ΠΊΠ°Π·Ρ‡ΠΈΠΊΠΎΠΌ (ΠΏΠΎ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°Ρ†ΠΈΠΈ ΠΎΡ‚ alemiks), Π° Ρ‚Π°ΠΊΠΆΠ΅ Π°Π½Π°Π»ΠΎΠ³ΠΈ ΠΈΠ· ΠΌΠΈΡ€Π° angular ngx-schema-form, AJSF (ΠΏΠΎ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°Ρ†ΠΈΠΈ ΠΎΡ‚ anotherpit).

И ссылку Π½Π° git-Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ, Π³Π΄Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ·Π½Π°ΠΊΠΎΠΌΠΈΡ‚ΡŒΡΡ с исходными Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ, ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΠΌΡ‹ΠΌΠΈ для ознакомлСния Π² Π΄Π°Π½Π½ΠΎΠΉ ΡΡ‚Π°Ρ‚ΡŒΠ΅: Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ с исходными Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ².

БистСмный Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΠΎΡ€,
Β© Π˜Ρ€ΠΈΠ½Π° Π‘Π»Π°ΠΆΠΈΠ½Π°

массивов JSON


ΠœΠ°ΡΡΠΈΠ²Ρ‹ ΠΊΠ°ΠΊ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ JSON

ΠŸΡ€ΠΈΠΌΠ΅Ρ€

[
Β«Π€ΠΎΡ€Π΄Β», Β«Π‘ΠœΠ’Β», Β«Π€ΠΈΠ°Ρ‚Β»]

ΠœΠ°ΡΡΠΈΠ²Ρ‹ Π² JSON ΠΏΠΎΡ‡Ρ‚ΠΈ Ρ‚Π°ΠΊΠΈΠ΅ ΠΆΠ΅, ΠΊΠ°ΠΊ массивы Π² JavaScript.

Π’ JSON значСния массива Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΈΠΌΠ΅Ρ‚ΡŒ Ρ‚ΠΈΠΏ строка, число, ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, массив, логичСскоС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅.
ΠΈΠ»ΠΈ null .

Π’ JavaScript значСниями массива ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ всС пСрСчислСнныС Π²Ρ‹ΡˆΠ΅, Π° Ρ‚Π°ΠΊΠΆΠ΅ Π»ΡŽΠ±Ρ‹Π΅ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ допустимыС значСния.
Π’Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ JavaScript, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π΄Π°Ρ‚Ρ‹ ΠΈ undefined.


ΠœΠ°ΡΡΠΈΠ²Ρ‹ Π² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°Ρ… JSON

ΠœΠ°ΡΡΠΈΠ²Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ значСниями свойства ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°:

ΠŸΡ€ΠΈΠΌΠ΅Ρ€

{
«ΠΈΠΌΡ»: «Π”ΠΆΠΎΠ½»,
«Π²ΠΎΠ·Ρ€Π°ΡΡ‚»: 30,
«Π°Π²Ρ‚ΠΎΠΌΠΎΠ±ΠΈΠ»ΠΈ»: [
Β«Π€ΠΎΡ€Π΄Β», Β«Π‘ΠœΠ’Β», Β«Π€ΠΈΠ°Ρ‚Β»]
}


Доступ ΠΊ значСниям массива

Π’Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚Π΅ доступ ΠΊ значСниям массива, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Π½ΠΎΠΌΠ΅Ρ€ индСкса:


Π¦ΠΈΠΊΠ» ΠΏΠΎ массиву

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ ΠΊ значСниям массива, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Ρ†ΠΈΠΊΠ» for-in :

Или Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для ΠΏΠ΅Ρ‚Π»ΠΈ :

ΠŸΡ€ΠΈΠΌΠ΅Ρ€

для (я
= 0; я x
+ = myObj.cars [я];
}

ΠŸΠΎΠΏΡ€ΠΎΠ±ΡƒΠΉ сам »



Π’Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Π΅ массивы Π² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°Ρ… JSON

ЗначСния Π² массивС Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π΄Ρ€ΡƒΠ³ΠΈΠΌ массивом ΠΈΠ»ΠΈ Π΄Π°ΠΆΠ΅ Π΄Ρ€ΡƒΠ³ΠΈΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ JSON:

ΠŸΡ€ΠΈΠΌΠ΅Ρ€

myObj =
{
«ΠΈΠΌΡ»: «Π”ΠΆΠΎΠ½»,
«Π²ΠΎΠ·Ρ€Π°ΡΡ‚»: 30,

«cars»: [
{«name»: «Ford»,
Β«ΠΌΠΎΠ΄Π΅Π»ΠΈΒ»: [«ЀиСста», «Ѐокус», Β«ΠœΡƒΡΡ‚Π°Π½Π³Β»]},
{«name»: «BMW», «models»: [«320», «X3», «X5»]},

{«name»: «Fiat», «models»: [«500», «Panda»]}
]
}

Для доступа ΠΊ массивам Π²Π½ΡƒΡ‚Ρ€ΠΈ массивов ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Ρ†ΠΈΠΊΠ» for-in для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ массива:

ΠŸΡ€ΠΈΠΌΠ΅Ρ€

для (я в myObj.cars) {
x + = «

» + myObj.cars [i] .name
+ «

«;
для (j в myObj.cars [i] .models) {
x + = myObj.cars [i] .models [j];
}
}

ΠŸΠΎΠΏΡ€ΠΎΠ±ΡƒΠΉ сам »


Π˜Π·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ значСния массива

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ порядковый Π½ΠΎΠΌΠ΅Ρ€ для измСнСния массива:


Π£Π΄Π°Π»ΠΈΡ‚ΡŒ элСмСнты массива

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово delete для удалСния элСмСнтов ΠΈΠ· массива:

.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ JSON с Ρ‚ΠΈΠΏΠ°ΠΌΠΈ Π΄Π°Π½Π½Ρ‹Ρ…, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ массив JSON

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ JSON

Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ Π±ΡƒΠ΄ΡƒΡ‚ всС ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ JSON, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΡ…Π²Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‚ всС Ρ‚ΠΈΠΏΡ‹ Π΄Π°Π½Π½Ρ‹Ρ…, ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅ΠΌΡ‹Π΅ JSON. Π’ΠΎΡ‚ список Ρ‚ΠΈΠΏΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ… JSON.

ДопустимыС Ρ‚ΠΈΠΏΡ‹ Π΄Π°Π½Π½Ρ‹Ρ… JSON

  1. Π‘Ρ‚Ρ€ΠΎΠΊΠ°
  2. НомСр
  3. ΠžΠ±ΡŠΠ΅ΠΊΡ‚
  4. Массив
  5. логичСский
  6. НулСвой

1. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ строки JSON:

 {
  "имя": "Вом",
  "lastname": "ΠšΡ€ΡƒΠΈΠ·",
  "профСссия": "АктСр"
} 

Π­Ρ‚ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊΠ΅, ΠΈ Π²Ρ‹ Π·Π½Π°Π΅Ρ‚Π΅ Π’ΠΎΠΌΠ° ΠšΡ€ΡƒΠ·Π°.Π­Ρ‚ΠΈ Π΄Π°Π½Π½Ρ‹Π΅ JSON ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ Π΄Π΅Ρ‚Π°Π»ΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ содСрТат строку. ΠŸΠΎΠΈΠ³Ρ€Π°ΠΉΡ‚Π΅ с ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠΌ строки JSON. Π‘Ρ‚Ρ€ΠΎΠΊΠ° Π² JSON Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ Π·Π°ΠΊΠ»ΡŽΡ‡Π΅Π½Π° Π² Π΄Π²ΠΎΠΉΠ½Ρ‹Π΅ ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠΈ.

2. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Π½ΠΎΠΌΠ΅Ρ€Π° JSON:

 {
  "id": 1,
  «возраст»: 56,
  Β«Π³ΠΎΠ΄ роТдСния»: 1963 Π³.,
  Β«Π΄Π°Ρ‚Π°Β»: 3,
  «мСсяц»: 7,
  «вСс»: 67,5
} 

Π­Ρ‚ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, ΠΊΠ°ΠΊ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ числа, ΠΈ я Π΄ΠΎΠ±Π°Π²ΠΈΠ» Π΄Π°Π½Π½Ρ‹Π΅ ΠΎ Π΄Π½Π΅ роТдСния Π’ΠΎΠΌΠ° ΠšΡ€ΡƒΠ·Π°. Π― Π΄ΠΎΠ±Π°Π²ΠΈΠ» это Π² 2018 Π³ΠΎΠ΄Ρƒ. Π’Π°ΠΊ Ρ‡Ρ‚ΠΎ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΎΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ, Ссли сСйчас Π½Π΅ 2018. πŸ™‚ ΠŸΠΎΠΈΠ³Ρ€Π°ΠΉΡ‚Π΅ с ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠΌ Π½ΠΎΠΌΠ΅Ρ€Π° JSON.Числа Π² JSON Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ Ρ†Π΅Π»Ρ‹ΠΌΠΈ ΠΈΠ»ΠΈ с ΠΏΠ»Π°Π²Π°ΡŽΡ‰Π΅ΠΉ запятой.

3. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° JSON:

 {
  "Π°ΠΊΡ‚Π΅Ρ€": {
    "name": "Π’ΠΎΠΌ ΠšΡ€ΡƒΠ·",
    «возраст»: 56,
    "Born At": "Π‘ΠΈΡ€Π°ΠΊΡƒΠ·Ρ‹, ΡˆΡ‚Π°Ρ‚ Нью-Π™ΠΎΡ€ΠΊ",
    Β«Π”Π°Ρ‚Π° роТдСния»: Β«3 июля 1962 Π³ΠΎΠ΄Π°Β»,
    "Ρ„ΠΎΡ‚ΠΎ": "https://jsonformatter.org/img/tom-cruise.jpg"
  }
} 

Π­Ρ‚ΠΈ Π΄Π°Π½Π½Ρ‹Π΅ JSON ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎΠ± Π°ΠΊΡ‚Π΅Ρ€Π΅ ΠΈ Π΅Π³ΠΎ свойствах. Π­Ρ‚ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ JSON, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ Ρ€Π°Π·Π½Ρ‹Π΅ свойства. ΠŸΠΎΠΈΠ³Ρ€Π°ΠΉΡ‚Π΅ с ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° JSON.

4. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ массива JSON

 {
  «АктСры»: [
    {
      "name": "Π’ΠΎΠΌ ΠšΡ€ΡƒΠ·",
      «возраст»: 56,
      "Born At": "Π‘ΠΈΡ€Π°ΠΊΡƒΠ·Ρ‹, ΡˆΡ‚Π°Ρ‚ Нью-Π™ΠΎΡ€ΠΊ",
      Β«Π”Π°Ρ‚Π° роТдСния»: Β«3 июля 1962 Π³ΠΎΠ΄Π°Β»,
      "Ρ„ΠΎΡ‚ΠΎ": "https://jsonformatter.org/img/tom-cruise.jpg"
    },
    {
      "name": "Π ΠΎΠ±Π΅Ρ€Ρ‚ Π”Π°ΡƒΠ½ΠΈ-младший",
      «возраст»: 53,
      "Born At": "Нью-Π™ΠΎΡ€ΠΊ, ΡˆΡ‚Π°Ρ‚ Нью-Π™ΠΎΡ€ΠΊ",
      Β«Π”Π°Ρ‚Π° роТдСния»: Β«4 апрСля 1965 Π³ΠΎΠ΄Π°Β»,
      "Ρ„ΠΎΡ‚ΠΎ": "https://jsonformatter.org/img/Robert-Downey-Jr.jpg "
    }
  ]
} 

Π­Ρ‚ΠΎ массив Π΄Π°Π½Π½Ρ‹Ρ… JSON. Он ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π΄Π²Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°-Π°ΠΊΡ‚Π΅Ρ€Π°, ΠΈ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ свои собствСнныС свойства. ΠŸΠΎΠΈΠ³Ρ€Π°ΠΉΡ‚Π΅ с ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠΌ массива JSON.

5. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ логичСского JSON

 {
  "hasChildren": ΠΏΡ€Π°Π²Π΄Π°,
  "hasTwitterAccount": ΠΏΡ€Π°Π²Π΄Π°,
  "hasGreyHair": false
} 

Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ JSON ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ, ΠΊΠ°ΠΊ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ логичСскиС значСния Π² JSON. ΠŸΠΎΠΈΠ³Ρ€Π°ΠΉΡ‚Π΅ с логичСским ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠΌ JSON. ЛогичСскоС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ истинным ΠΈΠ»ΠΈ Π»ΠΎΠΆΠ½Ρ‹ΠΌ.

6. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ NULL JSON

 {
  "ТСна": ноль
} 

JSON Null ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, ΠΊΠ°ΠΊ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ значСния NULL Π² JSON.ΠŸΠΎΠΈΠ³Ρ€Π°ΠΉΡ‚Π΅ с JSON Null Example. Null ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΊΠ°ΠΊ нСдоступноС.

Π― объяснил всС ΡˆΠ΅ΡΡ‚ΡŒ Ρ‚ΠΈΠΏΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ… JSON Π² ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹Ρ… Π²Ρ‹ΡˆΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°Ρ….

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ со всСм Ρ‚ΠΈΠΏΠΎΠΌ Π΄Π°Π½Π½Ρ‹Ρ… JSON.

 {
  «АктСры»: [
    {
      "name": "Π’ΠΎΠΌ ΠšΡ€ΡƒΠ·",
      «возраст»: 56,
      "Born At": "Π‘ΠΈΡ€Π°ΠΊΡƒΠ·Ρ‹, ΡˆΡ‚Π°Ρ‚ Нью-Π™ΠΎΡ€ΠΊ",
      Β«Π”Π°Ρ‚Π° роТдСния»: Β«3 июля 1962 Π³ΠΎΠ΄Π°Β»,
      "Ρ„ΠΎΡ‚ΠΎ": "https://jsonformatter.org/img/tom-cruise.jpg",
      "ТСна": ноль,
      «вСс»: 67.5,
      "hasChildren": ΠΏΡ€Π°Π²Π΄Π°,
      "hasGreyHair": лоТь,
      "Π΄Π΅Ρ‚ΠΈ": [
        Β«Π‘ΡƒΡ€ΠΈΒ»,
        "ИзабСлла Π”ΠΆΠ΅ΠΉΠ½",
        "ΠšΠΎΠ½Π½ΠΎΡ€"
      ]
    },
    {
      "name": "Π ΠΎΠ±Π΅Ρ€Ρ‚ Π”Π°ΡƒΠ½ΠΈ-младший",
      «возраст»: 53,
      "Born At": "Нью-Π™ΠΎΡ€ΠΊ, ΡˆΡ‚Π°Ρ‚ Нью-Π™ΠΎΡ€ΠΊ",
      Β«Π”Π°Ρ‚Π° роТдСния»: Β«4 апрСля 1965 Π³ΠΎΠ΄Π°Β»,
      "Ρ„ΠΎΡ‚ΠΎ": "https://jsonformatter.org/img/Robert-Downey-Jr.jpg",
      "ΠΆΠ΅Π½Π°": "Бьюзан Π”Π°ΡƒΠ½ΠΈ",
      «вСс»: 77,1,
      "hasChildren": ΠΏΡ€Π°Π²Π΄Π°,
      "hasGreyHair": лоТь,
      "Π΄Π΅Ρ‚ΠΈ": [
        "Индио ΡΠΎΠΊΠΎΠ»ΡŒΠ½ΠΈΡ‡ΠΈΠΉ",
        "Аври Роэль",
        "Экстон Элиас"
      ]
    }
  ]
} 

ВоспроизвСсти ΠΏΡ€ΠΈΠΌΠ΅Ρ€ JSON со всСми Ρ‚ΠΈΠΏΠ°ΠΌΠΈ Π΄Π°Π½Π½Ρ‹Ρ….

НадСюсь, эта ΡΡ‚Π°Ρ‚ΡŒΡ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚ Ρ€Π°Π·ΠΎΠ±Ρ€Π°Ρ‚ΡŒΡΡ Π² Π΄Π°Π½Π½Ρ‹Ρ… JSON. Если Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΡƒΠ·Π½Π°Ρ‚ΡŒ большС ΠΎ JSON, ΠΏΡ€ΠΎΡ‡Ρ‚ΠΈΡ‚Π΅ эту ΡΡ‚Π°Ρ‚ΡŒΡŽ. Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ JSON ?.

.

Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° Π½Π΅ Π½Π°ΠΉΠ΄Π΅Π½Π° Β· GitHub Pages

Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° Π½Π΅ Π½Π°ΠΉΠ΄Π΅Π½Π° Β· GitHub Pages

Π€Π°ΠΉΠ» Π½Π΅ Π½Π°ΠΉΠ΄Π΅Π½

Π‘Π°ΠΉΡ‚, настроСнный ΠΏΠΎ этому адрСсу, Π½Π΅
ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ Π·Π°ΠΏΡ€ΠΎΡˆΠ΅Π½Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ».

Если это ваш сайт, ΡƒΠ±Π΅Π΄ΠΈΡ‚Π΅ΡΡŒ, Ρ‡Ρ‚ΠΎ рСгистр ΠΈΠΌΠ΅Π½ΠΈ Ρ„Π°ΠΉΠ»Π° соотвСтствуСт URL-адрСсу.
Для ΠΊΠΎΡ€Π½Π΅Π²Ρ‹Ρ… URL (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, http://example.com/ ) Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ
index.html Ρ„Π°ΠΉΠ».

ΠŸΡ€ΠΎΡ‡Ρ‚ΠΈΡ‚Π΅ ΠΏΠΎΠ»Π½ΡƒΡŽ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡŽ
для получСния Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎΠ± использовании GitHub Pages .

.

JavaScript ΠΈ массив JSON — qaru

ΠŸΠ΅Ρ€Π΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ стСка

  1. Около
  2. ΠŸΡ€ΠΎΠ΄ΡƒΠΊΡ‚Ρ‹

  3. Для ΠΊΠΎΠΌΠ°Π½Π΄
  1. ΠŸΠ΅Ρ€Π΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ стСка
    ΠžΠ±Ρ‰Π΅ΡΡ‚Π²Π΅Π½Π½Ρ‹Π΅ вопросы ΠΈ ΠΎΡ‚Π²Π΅Ρ‚Ρ‹

  2. ΠŸΠ΅Ρ€Π΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ стСка для ΠΊΠΎΠΌΠ°Π½Π΄
    Π“Π΄Π΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ ΠΈ Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈ дСлятся частными знаниями с ΠΊΠΎΠ»Π»Π΅Π³Π°ΠΌΠΈ

  3. Вакансии
    ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ связанныС с Π½ΠΈΠΌ тСхничСскиС возмоТности ΠΊΠ°Ρ€ΡŒΠ΅Ρ€Π½ΠΎΠ³ΠΎ роста

  4. Π’Π°Π»Π°Π½Ρ‚
    НанимайтС тСхничСских спСциалистов ΠΈ создавайтС свой Π±Ρ€Π΅Π½Π΄ работодатСля

  5. Π Π΅ΠΊΠ»Π°ΠΌΠ°
    ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ΡΡŒ ΠΊ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌ ΠΈ Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³Π°ΠΌ со всСго ΠΌΠΈΡ€Π°

  6. О компании

.

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ

Π’Π°Ρˆ адрСс email Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½. ΠžΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ поля ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½Ρ‹ *