Fix #5681 - fix bootstrap4 detection
[roojs1] / docs / src / Roo_util_JSON.js.html
1 <html><head><title>Roo/util/JSON.js</title><link rel="stylesheet" type="text/css" href="../../css/highlight-js.css"/></head><body class="highlightpage"><code class="jsdoc-pretty"><span class="jsdoc-comment">/*
2  * Based on:
3  * Ext JS Library 1.1.1
4  * Copyright(c) 2006-2007, Ext JS, LLC.
5  *
6  * Originally Released Under LGPL - original licence link has changed is not relivant.
7  *
8  * Fork - LGPL
9  * &lt;script type=&quot;text/javascript&quot;&gt;
10  */
11 /**
12  * @class Roo.util.JSON
13  * Modified version of Douglas Crockford&quot;s json.js that doesn&quot;t
14  * mess with the Object prototype 
15  * http://www.json.org/js.html
16  * @singleton
17  */
18 </span><span class="jsdoc-var">Roo.util.JSON </span><span class="jsdoc-syntax">= </span><span class="jsdoc-keyword">new </span><span class="jsdoc-syntax">(</span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(){
19     </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">useHasOwn </span><span class="jsdoc-syntax">= {}</span><span class="jsdoc-var">.hasOwnProperty </span><span class="jsdoc-syntax">? </span><span class="jsdoc-keyword">true </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">;
20
21     </span><span class="jsdoc-comment">// crashes Safari in some instances
22     //var validRE = /^(&quot;(\\.|[^&quot;\\\n\r])*?&quot;|[,:{}\[\]0-9.\-+Eaeflnr-u \n\r\t])+?$/;
23
24     </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">pad </span><span class="jsdoc-syntax">= </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">n</span><span class="jsdoc-syntax">) {
25         </span><span class="jsdoc-keyword">return </span><span class="jsdoc-var">n </span><span class="jsdoc-syntax">&lt; 10 ? </span><span class="jsdoc-string">&quot;0&quot; </span><span class="jsdoc-syntax">+ </span><span class="jsdoc-var">n </span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">n</span><span class="jsdoc-syntax">;
26     };
27
28     </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">m </span><span class="jsdoc-syntax">= {
29         </span><span class="jsdoc-string">&quot;\b&quot;</span><span class="jsdoc-syntax">: </span><span class="jsdoc-string">'\\b'</span><span class="jsdoc-syntax">,
30         </span><span class="jsdoc-string">&quot;\t&quot;</span><span class="jsdoc-syntax">: </span><span class="jsdoc-string">'\\t'</span><span class="jsdoc-syntax">,
31         </span><span class="jsdoc-string">&quot;\n&quot;</span><span class="jsdoc-syntax">: </span><span class="jsdoc-string">'\\n'</span><span class="jsdoc-syntax">,
32         </span><span class="jsdoc-string">&quot;\f&quot;</span><span class="jsdoc-syntax">: </span><span class="jsdoc-string">'\\f'</span><span class="jsdoc-syntax">,
33         </span><span class="jsdoc-string">&quot;\r&quot;</span><span class="jsdoc-syntax">: </span><span class="jsdoc-string">'\\r'</span><span class="jsdoc-syntax">,
34         </span><span class="jsdoc-string">'&quot;' </span><span class="jsdoc-syntax">: </span><span class="jsdoc-string">'\\&quot;'</span><span class="jsdoc-syntax">,
35         </span><span class="jsdoc-string">&quot;\\&quot;</span><span class="jsdoc-syntax">: </span><span class="jsdoc-string">'\\\\'
36     </span><span class="jsdoc-syntax">};
37
38     </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">encodeString </span><span class="jsdoc-syntax">= </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">s</span><span class="jsdoc-syntax">){
39         </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(/[&quot;\\\x00-\x1f]/</span><span class="jsdoc-var">.test</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">s</span><span class="jsdoc-syntax">)) {
40             </span><span class="jsdoc-keyword">return </span><span class="jsdoc-string">'&quot;' </span><span class="jsdoc-syntax">+ </span><span class="jsdoc-var">s.replace</span><span class="jsdoc-syntax">(/([\x00-\x1f\\&quot;])/g, </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">a</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">b</span><span class="jsdoc-syntax">) {
41                 </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">c </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">m</span><span class="jsdoc-syntax">[</span><span class="jsdoc-var">b</span><span class="jsdoc-syntax">];
42                 </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">c</span><span class="jsdoc-syntax">){
43                     </span><span class="jsdoc-keyword">return </span><span class="jsdoc-var">c</span><span class="jsdoc-syntax">;
44                 }
45                 </span><span class="jsdoc-var">c </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">b.charCodeAt</span><span class="jsdoc-syntax">();
46                 </span><span class="jsdoc-keyword">return </span><span class="jsdoc-string">&quot;\\u00&quot; </span><span class="jsdoc-syntax">+
47                     </span><span class="jsdoc-var">Math.floor</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">c </span><span class="jsdoc-syntax">/ 16)</span><span class="jsdoc-var">.toString</span><span class="jsdoc-syntax">(16) +
48                     (</span><span class="jsdoc-var">c </span><span class="jsdoc-syntax">% 16)</span><span class="jsdoc-var">.toString</span><span class="jsdoc-syntax">(16);
49             }) + </span><span class="jsdoc-string">'&quot;'</span><span class="jsdoc-syntax">;
50         }
51         </span><span class="jsdoc-keyword">return </span><span class="jsdoc-string">'&quot;' </span><span class="jsdoc-syntax">+ </span><span class="jsdoc-var">s </span><span class="jsdoc-syntax">+ </span><span class="jsdoc-string">'&quot;'</span><span class="jsdoc-syntax">;
52     };
53
54     </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">encodeArray </span><span class="jsdoc-syntax">= </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">o</span><span class="jsdoc-syntax">){
55         </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">a </span><span class="jsdoc-syntax">= [</span><span class="jsdoc-string">&quot;[&quot;</span><span class="jsdoc-syntax">], </span><span class="jsdoc-var">b</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">i</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">l </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">o.length</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">v</span><span class="jsdoc-syntax">;
56             </span><span class="jsdoc-keyword">for </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">i </span><span class="jsdoc-syntax">= 0; </span><span class="jsdoc-var">i </span><span class="jsdoc-syntax">&lt; </span><span class="jsdoc-var">l</span><span class="jsdoc-syntax">; </span><span class="jsdoc-var">i </span><span class="jsdoc-syntax">+= 1) {
57                 </span><span class="jsdoc-var">v </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">o</span><span class="jsdoc-syntax">[</span><span class="jsdoc-var">i</span><span class="jsdoc-syntax">];
58                 </span><span class="jsdoc-keyword">switch </span><span class="jsdoc-syntax">(</span><span class="jsdoc-keyword">typeof </span><span class="jsdoc-var">v</span><span class="jsdoc-syntax">) {
59                     </span><span class="jsdoc-keyword">case </span><span class="jsdoc-string">&quot;undefined&quot;</span><span class="jsdoc-syntax">:
60                     </span><span class="jsdoc-keyword">case </span><span class="jsdoc-string">&quot;function&quot;</span><span class="jsdoc-syntax">:
61                     </span><span class="jsdoc-keyword">case </span><span class="jsdoc-string">&quot;unknown&quot;</span><span class="jsdoc-syntax">:
62                         </span><span class="jsdoc-keyword">break</span><span class="jsdoc-syntax">;
63                     </span><span class="jsdoc-keyword">default</span><span class="jsdoc-syntax">:
64                         </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">b</span><span class="jsdoc-syntax">) {
65                             </span><span class="jsdoc-var">a.push</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">','</span><span class="jsdoc-syntax">);
66                         }
67                         </span><span class="jsdoc-var">a.push</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">v </span><span class="jsdoc-syntax">=== </span><span class="jsdoc-keyword">null </span><span class="jsdoc-syntax">? </span><span class="jsdoc-string">&quot;null&quot; </span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">Roo.util.JSON.encode</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">v</span><span class="jsdoc-syntax">));
68                         </span><span class="jsdoc-var">b </span><span class="jsdoc-syntax">= </span><span class="jsdoc-keyword">true</span><span class="jsdoc-syntax">;
69                 }
70             }
71             </span><span class="jsdoc-var">a.push</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">&quot;]&quot;</span><span class="jsdoc-syntax">);
72             </span><span class="jsdoc-keyword">return </span><span class="jsdoc-var">a.join</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">&quot;&quot;</span><span class="jsdoc-syntax">);
73     };
74
75     </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">encodeDate </span><span class="jsdoc-syntax">= </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">o</span><span class="jsdoc-syntax">){
76         </span><span class="jsdoc-keyword">return </span><span class="jsdoc-string">'&quot;' </span><span class="jsdoc-syntax">+ </span><span class="jsdoc-var">o.getFullYear</span><span class="jsdoc-syntax">() + </span><span class="jsdoc-string">&quot;-&quot; </span><span class="jsdoc-syntax">+
77                 </span><span class="jsdoc-var">pad</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">o.getMonth</span><span class="jsdoc-syntax">() + 1) + </span><span class="jsdoc-string">&quot;-&quot; </span><span class="jsdoc-syntax">+
78                 </span><span class="jsdoc-var">pad</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">o.getDate</span><span class="jsdoc-syntax">()) + </span><span class="jsdoc-string">&quot;T&quot; </span><span class="jsdoc-syntax">+
79                 </span><span class="jsdoc-var">pad</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">o.getHours</span><span class="jsdoc-syntax">()) + </span><span class="jsdoc-string">&quot;:&quot; </span><span class="jsdoc-syntax">+
80                 </span><span class="jsdoc-var">pad</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">o.getMinutes</span><span class="jsdoc-syntax">()) + </span><span class="jsdoc-string">&quot;:&quot; </span><span class="jsdoc-syntax">+
81                 </span><span class="jsdoc-var">pad</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">o.getSeconds</span><span class="jsdoc-syntax">()) + </span><span class="jsdoc-string">'&quot;'</span><span class="jsdoc-syntax">;
82     };
83
84     </span><span class="jsdoc-comment">/**
85      * Encodes an Object, Array or other value
86      * @param {Mixed} o The variable to encode
87      * @return {String} The JSON string
88      */
89     </span><span class="jsdoc-var">this.encode </span><span class="jsdoc-syntax">= </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">o</span><span class="jsdoc-syntax">)
90     {
91         </span><span class="jsdoc-comment">// should this be extended to fully wrap stringify..
92
93         </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-keyword">typeof </span><span class="jsdoc-var">o </span><span class="jsdoc-syntax">== </span><span class="jsdoc-string">&quot;undefined&quot; </span><span class="jsdoc-syntax">|| </span><span class="jsdoc-var">o </span><span class="jsdoc-syntax">=== </span><span class="jsdoc-keyword">null</span><span class="jsdoc-syntax">){
94             </span><span class="jsdoc-keyword">return </span><span class="jsdoc-string">&quot;null&quot;</span><span class="jsdoc-syntax">;
95         }</span><span class="jsdoc-keyword">else if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">o </span><span class="jsdoc-keyword">instanceof </span><span class="jsdoc-var">Array</span><span class="jsdoc-syntax">){
96             </span><span class="jsdoc-keyword">return </span><span class="jsdoc-var">encodeArray</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">o</span><span class="jsdoc-syntax">);
97         }</span><span class="jsdoc-keyword">else if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">o </span><span class="jsdoc-keyword">instanceof </span><span class="jsdoc-var">Date</span><span class="jsdoc-syntax">){
98             </span><span class="jsdoc-keyword">return </span><span class="jsdoc-var">encodeDate</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">o</span><span class="jsdoc-syntax">);
99         }</span><span class="jsdoc-keyword">else if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-keyword">typeof </span><span class="jsdoc-var">o </span><span class="jsdoc-syntax">== </span><span class="jsdoc-string">&quot;string&quot;</span><span class="jsdoc-syntax">){
100             </span><span class="jsdoc-keyword">return </span><span class="jsdoc-var">encodeString</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">o</span><span class="jsdoc-syntax">);
101         }</span><span class="jsdoc-keyword">else if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-keyword">typeof </span><span class="jsdoc-var">o </span><span class="jsdoc-syntax">== </span><span class="jsdoc-string">&quot;number&quot;</span><span class="jsdoc-syntax">){
102             </span><span class="jsdoc-keyword">return </span><span class="jsdoc-var">isFinite</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">o</span><span class="jsdoc-syntax">) ? </span><span class="jsdoc-var">String</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">o</span><span class="jsdoc-syntax">) : </span><span class="jsdoc-string">&quot;null&quot;</span><span class="jsdoc-syntax">;
103         }</span><span class="jsdoc-keyword">else if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-keyword">typeof </span><span class="jsdoc-var">o </span><span class="jsdoc-syntax">== </span><span class="jsdoc-string">&quot;boolean&quot;</span><span class="jsdoc-syntax">){
104             </span><span class="jsdoc-keyword">return </span><span class="jsdoc-var">String</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">o</span><span class="jsdoc-syntax">);
105         }</span><span class="jsdoc-keyword">else </span><span class="jsdoc-syntax">{
106             </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">a </span><span class="jsdoc-syntax">= [</span><span class="jsdoc-string">&quot;{&quot;</span><span class="jsdoc-syntax">], </span><span class="jsdoc-var">b</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">i</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">v</span><span class="jsdoc-syntax">;
107             </span><span class="jsdoc-keyword">for </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">i </span><span class="jsdoc-keyword">in </span><span class="jsdoc-var">o</span><span class="jsdoc-syntax">) {
108                 </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(!</span><span class="jsdoc-var">useHasOwn </span><span class="jsdoc-syntax">|| </span><span class="jsdoc-var">o.hasOwnProperty</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">i</span><span class="jsdoc-syntax">)) {
109                     </span><span class="jsdoc-var">v </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">o</span><span class="jsdoc-syntax">[</span><span class="jsdoc-var">i</span><span class="jsdoc-syntax">];
110                     </span><span class="jsdoc-keyword">switch </span><span class="jsdoc-syntax">(</span><span class="jsdoc-keyword">typeof </span><span class="jsdoc-var">v</span><span class="jsdoc-syntax">) {
111                     </span><span class="jsdoc-keyword">case </span><span class="jsdoc-string">&quot;undefined&quot;</span><span class="jsdoc-syntax">:
112                     </span><span class="jsdoc-keyword">case </span><span class="jsdoc-string">&quot;function&quot;</span><span class="jsdoc-syntax">:
113                     </span><span class="jsdoc-keyword">case </span><span class="jsdoc-string">&quot;unknown&quot;</span><span class="jsdoc-syntax">:
114                         </span><span class="jsdoc-keyword">break</span><span class="jsdoc-syntax">;
115                     </span><span class="jsdoc-keyword">default</span><span class="jsdoc-syntax">:
116                         </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">b</span><span class="jsdoc-syntax">){
117                             </span><span class="jsdoc-var">a.push</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">','</span><span class="jsdoc-syntax">);
118                         }
119                         </span><span class="jsdoc-var">a.push</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.encode</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">i</span><span class="jsdoc-syntax">), </span><span class="jsdoc-string">&quot;:&quot;</span><span class="jsdoc-syntax">,
120                                 </span><span class="jsdoc-var">v </span><span class="jsdoc-syntax">=== </span><span class="jsdoc-keyword">null </span><span class="jsdoc-syntax">? </span><span class="jsdoc-string">&quot;null&quot; </span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">this.encode</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">v</span><span class="jsdoc-syntax">));
121                         </span><span class="jsdoc-var">b </span><span class="jsdoc-syntax">= </span><span class="jsdoc-keyword">true</span><span class="jsdoc-syntax">;
122                     }
123                 }
124             }
125             </span><span class="jsdoc-var">a.push</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">&quot;}&quot;</span><span class="jsdoc-syntax">);
126             </span><span class="jsdoc-keyword">return </span><span class="jsdoc-var">a.join</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">&quot;&quot;</span><span class="jsdoc-syntax">);
127         }
128     };
129
130     </span><span class="jsdoc-comment">/**
131      * Decodes (parses) a JSON string to an object. If the JSON is invalid, this function throws a SyntaxError.
132      * @param {String} json The JSON string
133      * @return {Object} The resulting object
134      */
135     </span><span class="jsdoc-var">this.decode </span><span class="jsdoc-syntax">= </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">json</span><span class="jsdoc-syntax">){
136
137         </span><span class="jsdoc-keyword">return  </span><span class="jsdoc-comment">/** eval:var:json */ </span><span class="jsdoc-keyword">eval</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">&quot;(&quot; </span><span class="jsdoc-syntax">+ </span><span class="jsdoc-var">json </span><span class="jsdoc-syntax">+ </span><span class="jsdoc-string">')'</span><span class="jsdoc-syntax">);
138     };
139 })();
140 </span><span class="jsdoc-comment">/** 
141  * Shorthand for {@link Roo.util.JSON#encode}
142  * @member Roo encode 
143  * @method */
144 </span><span class="jsdoc-var">Roo.encode </span><span class="jsdoc-syntax">= </span><span class="jsdoc-keyword">typeof</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">JSON</span><span class="jsdoc-syntax">) != </span><span class="jsdoc-string">'undefined' </span><span class="jsdoc-syntax">&amp;&amp; </span><span class="jsdoc-var">JSON.stringify </span><span class="jsdoc-syntax">? </span><span class="jsdoc-var">JSON.stringify </span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">Roo.util.JSON.encode</span><span class="jsdoc-syntax">;
145 </span><span class="jsdoc-comment">/** 
146  * Shorthand for {@link Roo.util.JSON#decode}
147  * @member Roo decode 
148  * @method */
149 </span><span class="jsdoc-var">Roo.decode </span><span class="jsdoc-syntax">= </span><span class="jsdoc-keyword">typeof</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">JSON</span><span class="jsdoc-syntax">) != </span><span class="jsdoc-string">'undefined' </span><span class="jsdoc-syntax">&amp;&amp; </span><span class="jsdoc-var">JSON.parse </span><span class="jsdoc-syntax">? </span><span class="jsdoc-var">JSON.parse </span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">Roo.util.JSON.decode</span><span class="jsdoc-syntax">;
150 </span></code></body></html>