aboutsummaryrefslogtreecommitdiff
path: root/files/ru/web/javascript/reference/global_objects/json/parse/index.html
blob: febd8ba9437f05369a1626ec89e26cc53d1e18c8 (plain)
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
---
title: JSON.parse()
slug: Web/JavaScript/Reference/Global_Objects/JSON/parse
tags:
  - ECMAScript5
  - JSON
  - JavaScript
  - Method
  - Reference
translation_of: Web/JavaScript/Reference/Global_Objects/JSON/parse
---
<div>{{JSRef("Global_Objects", "JSON")}}</div>

<h2 id="Summary" name="Summary">Сводка</h2>
<p>Метод <strong><code>JSON.parse()</code></strong> разбирает строку JSON, возможно с преобразованием получаемого в процессе разбора значения.</p>

<h2 id="Syntax" name="Syntax">Синтаксис</h2>
<pre class="syntaxbox"><code>JSON.parse(<var>text</var>[, <var>reviver</var>])</code></pre>

<h3 id="Parameters" name="Parameters">Параметры</h3>
<dl>
 <dt><code>text</code></dt>
 <dd>Разбираемая строка JSON. Смотрите документацию по объекту {{jsxref("JSON")}} для описания синтаксиса JSON.</dd>
 <dt><code>reviver</code> {{optional_inline}}</dt>
 <dd>Если параметр является функцией, определяет преобразование полученного в процессе разбора значения, прежде, чем оно будет возвращено вызывающей стороне.</dd>
</dl>

<h3 id="Returns" name="Returns">Возвращаемое значение</h3>
<p>Возвращает объект {{jsxref("Object")}}, соответствующий переданной строке JSON <code>text</code>.</p>

<h3 id="Throws" name="Throws">Выбрасываемые исключения</h3>
<p>Выбрасывает исключение {{jsxref("SyntaxError")}}, если разбираемая строка не является правильным JSON.</p>

<h2 id="Examples" name="Examples">Примеры</h2>

<h3 id="Example:_Using_JSON.parse" name="Example:_Using_JSON.parse">Пример: использование метода <code>JSON.parse()</code></h3>
<pre class="brush: js">JSON.parse('{}');              // {}
JSON.parse('true');            // true
JSON.parse('"foo"');           // "foo"
JSON.parse('[1, 5, "false"]'); // [1, 5, "false"]
JSON.parse('null');            // null
</pre>

<h3 id="Example:_Using_the_reviver_parameter" name="Example:_Using_the_reviver_parameter">Пример: использование параметра <code>reviver</code></h3>
<p>Если определён параметр <code>reviver</code>, значение, вычисляемое при разборе строки, будет <em>преобразовано</em> перед его возвратом. В частности, вычисленное значение и все его свойства (начиная с самых вложенных свойств и кончая самим значением), каждое проходят через функцию <code>reviver</code>, которая вызывается с контекстом <code>this</code>, содержащим объект в виде обрабатываемого свойства, и с аргументами: именем свойства в виде строки и значением свойства. Если функция <code>reviver</code> вернёт {{jsxref("undefined")}} (либо вообще не вернёт никакого значения, например, если выполнение достигнет конца функции), свойство будет удалено из объекта. В противном случае свойство будет переопределено возвращаемым значением.</p>
<p>В конечном итоге, функция <code>reviver</code> вызывается с пустой строкой и самым верхним значением, чтобы обеспечить преобразование самого верхнего значения. Убедитесь, что вы правильно обрабатываете этот случай — обычно для этого нужно просто вернуть само значение — или метод <code>JSON.parse()</code> вернёт {{jsxref("undefined")}}.</p>
<pre class="brush: js">JSON.parse('{"p": 5}', function(k, v) {
  if (k === '') { return v; } // самое верхнее значение - возвращаем его
  return v * 2;               // иначе возвращаем v * 2.
});                           // { p: 10 }

JSON.parse('{"1": 1, "2": 2, "3": {"4": 4, "5": {"6": 6}}}', function(k, v) {
  console.log(k); // пишем имя текущего свойства, последним именем будет ""
  return v;       // возвращаем неизменённое значение свойства
});

// 1
// 2
// 4
// 6
// 5
// 3
// ""
</pre>

<h2 id="Specifications" name="Specifications">Спецификации</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.2', 'JSON.parse')}}</td>
   <td>{{Spec2('ES5.1')}}</td>
   <td>Изначальное определение. Реализована в JavaScript 1.7.</td>
  </tr>
  <tr>
   <td>{{SpecName('ES6', '#sec-json.parse', 'JSON.parse')}}</td>
   <td>{{Spec2('ES6')}}</td>
   <td> </td>
  </tr>
 </tbody>
</table>

<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
<div>{{CompatibilityTable}}</div>
<div id="compat-desktop">
 <table class="compat-table">
  <tbody>
   <tr>
    <th>Возможность</th>
    <th>Chrome</th>
    <th>Firefox (Gecko)</th>
    <th>Internet Explorer</th>
    <th>Opera</th>
    <th>Safari</th>
   </tr>
   <tr>
    <td>Базовая поддержка</td>
    <td>{{CompatVersionUnknown}}</td>
    <td>{{CompatGeckoDesktop("1.9.1")}}</td>
    <td>{{CompatIE("8.0")}}</td>
    <td>{{CompatOpera("10.5")}}</td>
    <td>{{CompatSafari("4.0")}}</td>
   </tr>
  </tbody>
 </table>
</div>
<div id="compat-mobile">
 <table class="compat-table">
  <tbody>
   <tr>
    <th>Возможность</th>
    <th>Android</th>
    <th>Chrome для Android</th>
    <th>Firefox Mobile (Gecko)</th>
    <th>IE Mobile</th>
    <th>Opera Mobile</th>
    <th>Safari Mobile</th>
   </tr>
   <tr>
    <td>Базовая поддержка</td>
    <td>{{CompatVersionUnknown}}</td>
    <td>{{CompatVersionUnknown}}</td>
    <td>{{CompatGeckoMobile("1.0")}}</td>
    <td>{{CompatVersionUnknown}}</td>
    <td>{{CompatVersionUnknown}}</td>
    <td>{{CompatVersionUnknown}}</td>
   </tr>
  </tbody>
 </table>
</div>
<p>На основе <a class="external" href="http://kangax.github.com/es5-compat-table/">таблицы совместимости Kangax</a>.</p>

<h3 id="Gecko-specific_notes" name="Gecko-specific_notes">Примечания по Gecko</h3>
<p>Начиная с Gecko 29 {{geckoRelease("29")}}, при передаче некорректной строки JSON выдаётся более подробное собщение об ошибке, содержащее номер строки и колонки, в которых была обнаружена ошибка разбора. Это полезно при отладке больших данных JSON.</p>
<pre class="brush: js">JSON.parse('[1, 2, 3,]');
// SyntaxError: JSON.parse: unexpected character at
// line 1 column 10 of the JSON data
// SyntaxError: JSON.parse: неожиданный символ
// в строке 1, колонке 10 данных JSON
</pre>

<h2 id="See_also" name="See_also">Смотрите также</h2>
<ul>
 <li><a href="/ru/docs/Web/JavaScript/Guide/Using_native_JSON">Использование родного объекта <code>JSON</code></a></li>
 <li>{{jsxref("JSON.stringify()")}}</li>
</ul>