aboutsummaryrefslogtreecommitdiff
path: root/files/tr/web/javascript/reference/global_objects/json/index.html
blob: f458b5390e6dfe8187e78eb7d49668e450974d64 (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
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
---
title: JSON
slug: Web/JavaScript/Reference/Global_Objects/JSON
tags:
  - JSON
  - JavaScript Nesneler
  - polyfill
translation_of: Web/JavaScript/Reference/Global_Objects/JSON
---
<div>{{JSRef}}</div>

<p>JSON nesnesi, <a href="http://json.org/">JavaScript Object Notasyonunu</a> çözümlemek ve değerleri JSON'a çevirmek için kullanılan metodları içinde barındırır. Çağırılamaz veya inşa edilemez, ve iki özelliği haricinde kendisine ait başka ilginç bir kullanılabilirliği de yoktur.</p>

<h2 id="Açıklama">Açıklama</h2>

<h3 id="JavaScript_Obje_Notasyonu">JavaScript Obje Notasyonu</h3>

<p>JSON; nesneleri, dizileri, sayıları, dizeleri, boolean değerleri ve {{jsxref("null")}} değerini seri haline getirmek için kullanılan bir sözdizimidir. JavaScript sözdizimine bağlıdır ama farklılıkları da vardır: Her JavaScript, JSON olmadığı gibi her JSON da JavaScript olmayabilir. Buna da göz atın: <a href="http://timelessrepo.com/json-isnt-a-javascript-subset">JSON: The JavaScript subset that isn't</a>.</p>

<table>
 <caption>JavaScript ve JSON farklılıkları</caption>
 <thead>
  <tr>
   <th scope="col">JavaScript tipi</th>
   <th scope="col">JSON farklılıkları</th>
  </tr>
 </thead>
 <tbody>
  <tr>
   <td>Nesneler ve Diziler</td>
   <td>Property isimleri çift tırnaklı dizeler olmalıdır; sona konulan virgüller yasaktır.</td>
  </tr>
  <tr>
   <td>Sayılar</td>
   <td>Öne gelecek sıfırlar yasaktır( JSON.stringify'da sıfırlar göz ardı edilirler, ama JSON.parse'da SyntaxError döndürürler); bir ondalik noktanın devamında en az bir sayı gelmelidir.</td>
  </tr>
  <tr>
   <td>Dizeler</td>
   <td>
    <p>Sadece sınırlı sayıda karakterin kaçmasına izin verilebilir; belli kontrol karakterleri yasaklanmıştır; Unicode satır ayırıcı (<a href="http://unicode-table.com/en/2028/">U+2028</a>) ve paragraf ayırıcı (<a href="http://unicode-table.com/en/2029/">U+2029</a>) karakterlerine izin verilir; dizeler çift tırnaklı olmalıdır. Aşağıdaki örneğe göz atarsanız; {{jsxref("JSON.parse()")}}'ın düzgün çalıştığını ve JavaScript olarak değerlendiği zaman bir {{jsxref("SyntaxError")}} döndürüldüğünü görebilirsiniz:</p>

    <pre class="brush: js">
var code = '"\u2028\u2029"';
JSON.parse(code); // düzgün çalışıyor.
eval(code); // hata veriyor.
</pre>
   </td>
  </tr>
 </tbody>
</table>

<p>Tüm JSON söz dizimi aşağıdaki gibidir:</p>

<pre><var>JSON</var> = <strong>null</strong>
    <em>or</em> <strong>true</strong> <em>or</em> <strong>false</strong>
    <em>or</em> <var>JSONNumber</var>
    <em>or</em> <var>JSONString</var>
    <em>or</em> <var>JSONObject</var>
    <em>or</em> <var>JSONArray</var>

<var>JSONNumber</var> = <strong>-</strong> <var>PositiveNumber</var>
          <em>or</em> <var>PositiveNumber</var>
<var>PositiveNumber</var> = DecimalNumber
              <em>or</em> <var>DecimalNumber</var> <strong>.</strong> <var>Digits</var>
              <em>or</em> <var>DecimalNumber</var> <strong>.</strong> <var>Digits</var> <var>ExponentPart</var>
              <em>or</em> <var>DecimalNumber</var> <var>ExponentPart</var>
<var>DecimalNumber</var> = <strong>0</strong>
             <em>or</em> <var>OneToNine</var> <var>Digits</var>
<var>ExponentPart</var> = <strong>e</strong> <var>Exponent</var>
            <em>or</em> <strong>E</strong> <var>Exponent</var>
<var>Exponent</var> = <var>Digits</var>
        <em>or</em> <strong>+</strong> <var>Digits</var>
        <em>or</em> <strong>-</strong> <var>Digits</var>
<var>Digits</var> = <var>Digit</var>
      <em>or</em> <var>Digits</var> <var>Digit</var>
<var>Digit</var> = <strong>0</strong> through <strong>9</strong>
<var>OneToNine</var> = <strong>1</strong> through <strong>9</strong>

<var>JSONString</var> = <strong>""</strong>
          <em>or</em> <strong>"</strong> <var>StringCharacters</var> <strong>"</strong>
<var>StringCharacters</var> = <var>StringCharacter</var>
                <em>or</em> <var>StringCharacters</var> <var>StringCharacter</var>
<var>StringCharacter</var> = any character
                  <em>except</em> <strong>"</strong> <em>or</em> <strong>\</strong> <em>or</em> U+0000 through U+001F
               <em>or</em> <var>EscapeSequence</var>
<var>EscapeSequence</var> = <strong>\"</strong> <em>or</em> <strong>\/</strong> <em>or</em> <strong>\\</strong> <em>or</em> <strong>\b</strong> <em>or</em> <strong>\f</strong> <em>or</em> <strong>\n</strong> <em>or</em> <strong>\r</strong> <em>or</em> <strong>\t</strong>
              <em>or</em> <strong>\u</strong> <var>HexDigit</var> <var>HexDigit</var> <var>HexDigit</var> <var>HexDigit</var>
<var>HexDigit</var> = <strong>0</strong> through <strong>9</strong>
        <em>or</em> <strong>A</strong> through <strong>F</strong>
        <em>or</em> <strong>a</strong> through <strong>f</strong>

<var>JSONObject</var> = <strong>{</strong> <strong>}</strong>
          <em>or</em> <strong>{</strong> <var>Members</var> <strong>}</strong>
<var>Members</var> = <var>JSONString</var> <strong>:</strong> <var>JSON</var>
       <em>or</em> <var>Members</var> <strong>,</strong> <var>JSONString</var> <strong>:</strong> <var>JSON</var>

<var>JSONArray</var> = <strong>[</strong> <strong>]</strong>
         <em>or</em> <strong>[</strong> <var>ArrayElements</var> <strong>]</strong>
<var>ArrayElements</var> = <var>JSON</var>
             <em>or</em> <var>ArrayElements</var> <strong>,</strong> <var>JSON</var>
</pre>

<p>Önemsiz boşluklar; <code><var>JSONNumber ve JSONString</var></code> dışında herhangi bir yerde kullanılabilirler (sayılar boşluk içeremezler) veya (Dizeler için, dizede karşılık gelen karakter olarak yorumlanır, veye hataya sebep verir). Tab karakteri (<a href="http://unicode-table.com/en/0009/">U+0009</a>), satırbaşı (<a href="http://unicode-table.com/en/000D/">U+000D</a>), line feed (<a href="http://unicode-table.com/en/000A/">U+000A</a>), ve boşluk (<a href="http://unicode-table.com/en/0020/">U+0020</a>) karakterleri tek kabul edilen boşluk karakterleridir.</p>

<h2 id="Metotlar">Metotlar</h2>

<dl>
 <dt>{{jsxref("JSON.parse()")}}</dt>
 <dd>Bir dizeyi; JSON olarak çözümler, opsiyonel olarak üretilen değer ve değerin özelliklerini de dönüştürebilir. Sonrasında değeri döndürür.</dd>
 <dt>{{jsxref("JSON.stringify()")}}</dt>
 <dd>Belirtilen değerle ilişkili JSON dizesini döndürür, opsiyonel olarak sadece belirlenen özellikleri ekler veya özellik değerlerini kullanıcı tanımlı biçimde değiştirir.</dd>
</dl>

<h2 id="Polyfill">Polyfill</h2>

<p><code>JSON</code> nesnesi eski tarayıcılar tarafından desteklenmemektedir. Bunun üstesinden geçici bir şekilde gelmek için scriptinizin başına aşağıdaki kodu ekleyebilirsiniz, bu şekilde aslen destenlenmediğinde <code>JSON</code> nesnesinin kullanımına izin verilmiş olur (Internet Explorer 6 gibi).</p>

<p>Aşağıdaki algoritma asıl <code>JSON</code> nesnesinin bir taklididir.</p>

<pre class="brush: js">if (!window.JSON) {
  window.JSON = {
    parse: function(sJSON) { return eval('(' + sJSON + ')'); },
    stringify: (function () {
      var toString = Object.prototype.toString;
      var hasOwnProperty = Object.prototype.hasOwnProperty;
      var isArray = Array.isArray || function (a) { return toString.call(a) === '[object Array]'; };
      var escMap = {'"': '\\"', '\\': '\\\\', '\b': '\\b', '\f': '\\f', '\n': '\\n', '\r': '\\r', '\t': '\\t'};
      var escFunc = function (m) { return escMap[m] || '\\u' + (m.charCodeAt(0) + 0x10000).toString(16).substr(1); };
      var escRE = /[\\"\u0000-\u001F\u2028\u2029]/g;
      return function stringify(value) {
        if (value == null) {
          return 'null';
        } else if (typeof value === 'number') {
          return isFinite(value) ? value.toString() : 'null';
        } else if (typeof value === 'boolean') {
          return value.toString();
        } else if (typeof value === 'object') {
          if (typeof value.toJSON === 'function') {
            return stringify(value.toJSON());
          } else if (isArray(value)) {
            var res = '[';
            for (var i = 0; i &lt; value.length; i++)
              res += (i ? ', ' : '') + stringify(value[i]);
            return res + ']';
          } else if (toString.call(value) === '[object Object]') {
            var tmp = [];
            for (var k in value) {
              // in case "hasOwnProperty" has been shadowed
              if (hasOwnProperty.call(value, k))
                tmp.push(stringify(k) + ': ' + stringify(value[k]));
            }
            return '{' + tmp.join(', ') + '}';
          }
        }
        return '"' + value.toString().replace(escRE, escFunc) + '"';
      };
    })()
  };
}
</pre>

<p><code>JSON</code> nesnesi için daha karmaşık ve bilindik <a class="external" href="http://remysharp.com/2010/10/08/what-is-a-polyfill/">polyfill</a>ler ise: <a class="link-https" href="https://github.com/douglascrockford/JSON-js">JSON2</a> ve <a class="external" href="http://bestiejs.github.com/json3">JSON3</a>'tür.</p>

<h2 id="Özellikler">Özellikler</h2>

<table class="standard-table">
 <tbody>
  <tr>
   <th scope="col">Specification</th>
   <th scope="col">Status</th>
   <th scope="col">Comment</th>
  </tr>
  <tr>
   <td>{{SpecName('ES5.1', '#sec-15.12', 'JSON')}}</td>
   <td>{{Spec2('ES5.1')}}</td>
   <td>İlk tanım.</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="Tarayıcı_uyumluluğu">Tarayıcı uyumluluğu</h2>

<div>
<div>
<div class="hidden">Bu sayfadaki uyumluluk tablosu yapılandırılmış verilerle oluşturulmuştur. Eğer bu verilere katkıda bulunmak isterseniz, lütfen <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> linkine göz atın ve bize pull request gönderin.</div>

<p>{{Compat("javascript.builtins.JSON")}}</p>
</div>
</div>

<h2 id="Ayrıca_Bakınız">Ayrıca Bakınız</h2>

<ul>
 <li>{{jsxref("Date.prototype.toJSON()")}}</li>
</ul>