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
|
---
title: JSON
slug: Web/JavaScript/Reference/Global_Objects/JSON
tags:
- JSON
- JavaScript
- Довідка
- Об'єкт
translation_of: Web/JavaScript/Reference/Global_Objects/JSON
---
<div>{{JSRef}}</div>
<p>Об'єкт <strong><code>JSON</code></strong> містить методи для розбору <a class="external" href="http://json.org/">JavaScript Object Notation</a> ({{glossary("JSON")}}) і конвертації значень у JSON. Його можна або просто викликати, або конструювати; і окрім своїх двох методів він не має у собі іншої корисної функціональності.</p>
<h2 id="Опис">Опис</h2>
<h3 id="Об'єктна_нотація_JavaScript">Об'єктна нотація JavaScript</h3>
<p>JSON - це синтаксис для серіалізації об'єктів, масивів, чисел, строк, булевих значень, та {{jsxref("null")}}. Він заснований на синтаксисі JavaScript, проте дещо відрізняється від нього: деякий JavaScript не є JSON, і деякий JSON не є JavaScript. Докладніше у <a href="http://timelessrepo.com/json-isnt-a-javascript-subset">JSON: The JavaScript subset that isn't</a>.</p>
<table>
<caption>Відмінності JavaScript і JSON</caption>
<thead>
<tr>
<th scope="col">Тип у JavaScript</th>
<th scope="col">Відмінність у JSON</th>
</tr>
</thead>
<tbody>
<tr>
<td>Об'єкти та масиви</td>
<td>Назви полів повинні являти собою строки у подвійних лапках; прикінцеві коми заборонені.</td>
</tr>
<tr>
<td>Числа</td>
<td>Ведучі нулі також заборонені (При виконанні JSON.stringify нулі просто проігноруються, проте JSON.parse викине SyntaxError); після десяткової крапки повинна слідувати хоча б одна цифра.</td>
</tr>
<tr>
<td>Строки</td>
<td>
<p>Лише обмежений набір символів можна екранувати; деякі керівні символи заборонені; такі символи юнікоду, як розділювач рядків (<a href="http://unicode-table.com/en/2028/">U+2028</a>) та розділювач абзаців (<a href="http://unicode-table.com/en/2029/">U+2029</a>) дозволені; строки повинні виділятись подвійними лапками. Зверніть увагу на наступні приклади, де {{jsxref("JSON.parse()")}} нормально працює, проте при обчисленні виразу як JavaScript-коду буде отримана помилка {{jsxref("SyntaxError")}}:</p>
<pre class="brush: js">
var code = '"\u2028\u2029"';
JSON.parse(code); // працює
eval(code); // помилка
</pre>
</td>
</tr>
</tbody>
</table>
<p>Повний синтаксис JSON виглядає так:</p>
<pre><var>JSON</var> = <strong>null</strong>
або <strong>true</strong> або <strong>false</strong>
або <var>JSONNumber</var>
або <var>JSONString</var>
або <var>JSONObject</var>
або <var>JSONArray</var>
<var>JSONNumber</var> = <strong>-</strong> <var>PositiveNumber</var>
<em>чи</em> <var>PositiveNumber</var>
<var>PositiveNumber</var> = DecimalNumber
або <var>DecimalNumber</var> <strong>.</strong> <var>Digits</var>
<em>або</em> <var>DecimalNumber</var> <strong>.</strong> <var>Digits</var> <var>ExponentPart</var>
або <var>DecimalNumber</var> <var>ExponentPart</var>
<var>DecimalNumber</var> = <strong>0</strong>
або <var>OneToNine</var> <var>Digits</var>
<var>ExponentPart</var> = <strong>e</strong> <var>Exponent</var>
чи <strong>E</strong> <var>Exponent</var>
<var>Exponent</var> = <var>Digits</var>
<em>або</em> <strong>+</strong> <var>Digits</var>
або <strong>-</strong> <var>Digits</var>
<var>Digits</var> = <var>Digit</var>
чи <var>Digits</var> <var>Digit</var>
<var>Digit</var> = від <strong>0</strong> до <strong>9</strong>
<var>OneToNine</var> = <strong>від 1</strong> до <strong>9</strong>
<var>JSONString</var> = <strong>""</strong>
<em>чи</em> <strong>"</strong> <var>StringCharacters</var> <strong>"</strong>
<var>StringCharacters</var> = <var>StringCharacter</var>
чи <var>StringCharacters</var> <var>StringCharacter</var>
<var>StringCharacter</var> = будь-який символ
за виключенням <strong>"</strong> або <strong>\</strong> або від U+0000 до U+001F
або <var>EscapeSequence</var>
<var>EscapeSequence</var> = <strong>\"</strong> або <strong>\/</strong> або <strong>\\</strong> або <strong>\b</strong> або <strong>\f</strong> або <strong>\n</strong> або <strong>\r</strong> або <strong>\t</strong>
або <strong>\u</strong> <var>HexDigit</var> <var>HexDigit</var> <var>HexDigit</var> <var>HexDigit</var>
<var>HexDigit</var> = від <strong>0</strong> до <strong>9</strong>
або від <strong>A</strong> до <strong>F</strong>
або від <strong>a</strong> до <strong>f</strong>
<var>JSONObject</var> = <strong>{</strong> <strong>}</strong>
чи <strong>{</strong> <var>Members</var> <strong>}</strong>
<var>Members</var> = <var>JSONString</var> <strong>:</strong> <var>JSON</var>
чи <var>Members</var> <strong>,</strong> <var>JSONString</var> <strong>:</strong> <var>JSON</var>
<var>JSONArray</var> = <strong>[</strong> <strong>]</strong>
<em>чи</em> <strong>[</strong> <var>ArrayElements</var> <strong>]</strong>
<var>ArrayElements</var> = <var>JSON</var>
<em>чи</em> <var>ArrayElements</var> <strong>,</strong> <var>JSON</var>
</pre>
<p>Беззмістовні пробільні символи можуть бути будь-де за винятком <code><var>JSONNumber</var></code> (числа не повинні містити пробіли) або <code><var>JSONString</var></code> (де це сприймається за частину строки, або призведе до помилки). Символ табуляції (<a href="http://unicode-table.com/en/0009/">U+0009</a>), повернення каретки (<a href="http://unicode-table.com/en/000D/">U+000D</a>), початку рядка (<a href="http://unicode-table.com/en/000A/">U+000A</a>) та пробіл (<a href="http://unicode-table.com/en/0020/">U+0020</a>) - це всі дійсні пробільні символи.</p>
<h2 id="Методи">Методи</h2>
<dl>
<dt>{{jsxref("JSON.parse()")}}</dt>
<dd>Розбирає строку як JSON, як опція — перетворює результат і його властивості, та повертає його.</dd>
<dt>{{jsxref("JSON.stringify()")}}</dt>
<dd>Повертає строку JSON відповідно до поданого значення. Як опція — може включити до результату лише певні поля чи замінити значення полів згідно з побажаннями користувача.</dd>
</dl>
<h2 id="Специфікації">Специфікації</h2>
<table class="standard-table">
<tbody>
<tr>
<th scope="col">Специфікація</th>
<th scope="col">Статус</th>
<th scope="col">Примітка</th>
</tr>
<tr>
<td>{{SpecName('ES5.1', '#sec-15.12', 'JSON')}}</td>
<td>{{Spec2('ES5.1')}}</td>
<td>Первинне визначення.</td>
</tr>
<tr>
<td>{{SpecName('ES6', '#sec-json-object', 'JSON')}}</td>
<td>{{Spec2('ES6')}}</td>
<td> </td>
</tr>
<tr>
<td>{{SpecName('ESDraft', '#sec-json-object', 'JSON')}}</td>
<td>{{Spec2('ESDraft')}}</td>
<td> </td>
</tr>
</tbody>
</table>
<h2 id="Підтримка_у_браузерах">Підтримка у браузерах</h2>
<div>
<div>
<div>
<div class="hidden">Таблиця сумісності на цій сторінці сформована автоматично із структурованих даних. Якщо ви маєте бажання зробити свій внесок до цих даних - будь-ласка, ось репозиторій <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a>.</div>
<p>{{Compat("javascript.builtins.JSON")}}</p>
</div>
</div>
</div>
<h2 id="Дивіться_також">Дивіться також</h2>
<ul>
<li>{{jsxref("Date.prototype.toJSON()")}}</li>
</ul>
|