﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-I am Thinking !-文章分类-JavaScript &amp; AJAX</title><link>http://www.blogjava.net/Juizes361/category/42142.html</link><description>路漫漫兮其修远兮,吾将上下而求索!</description><language>zh-cn</language><lastBuildDate>Sat, 31 Oct 2009 02:55:33 GMT</lastBuildDate><pubDate>Sat, 31 Oct 2009 02:55:33 GMT</pubDate><ttl>60</ttl><item><title>判断JS文件加载完成(转)</title><link>http://www.blogjava.net/Juizes361/articles/299861.html</link><dc:creator>残叶舞风</dc:creator><author>残叶舞风</author><pubDate>Tue, 27 Oct 2009 00:49:00 GMT</pubDate><guid>http://www.blogjava.net/Juizes361/articles/299861.html</guid><wfw:comment>http://www.blogjava.net/Juizes361/comments/299861.html</wfw:comment><comments>http://www.blogjava.net/Juizes361/articles/299861.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Juizes361/comments/commentRss/299861.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Juizes361/services/trackbacks/299861.html</trackback:ping><description><![CDATA[<span style="font-family: Comic Sans MS;"><span style="font-size: 10pt;"><br />
在&#8220;按需加载&#8221;的需求中，我们经常会判断当脚本加载完成时，返回一个回调函数，那如何去判断脚本的加载完成呢? <br />
<br />
我们可以对加载的 JS 对象使用 onload 来判断(js.onload)，此方法 Firefox2、Firefox3、Safari3.1+、Opera9.6+ 浏览器都能很好的支持，但 IE6、IE7 却不支持。曲线救国 —— IE6、IE7 我们可以使用 js.onreadystatechange 来跟踪每个状态变化的情况(一般为 loading 、loaded、interactive、complete)，当返回状态为 loaded 或 complete 时，则表示加载完成，返回回调函数。<br />
<br />
对于 readyState 状态需要一个补充说明：<br />
<br />
在 interactive 状态下，用户可以参与互动。<br />
<br />
Opera 其实也支持 js.onreadystatechange，但他的状态和 IE 的有很大差别。<br />
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #0000ff;">function</span><span style="color: #000000;">&nbsp;include_js(file)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">var</span><span style="color: #000000;">&nbsp;_doc&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;document.getElementsByTagName('head')[</span><span style="color: #000000;">0</span><span style="color: #000000;">];<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">var</span><span style="color: #000000;">&nbsp;js&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;document.createElement('script');<br />
&nbsp;&nbsp;&nbsp;&nbsp;js.setAttribute('type',&nbsp;'text</span><span style="color: #000000;">/</span><span style="color: #000000;">javascript');<br />
&nbsp;&nbsp;&nbsp;&nbsp;js.setAttribute('src',&nbsp;file);<br />
&nbsp;&nbsp;&nbsp;&nbsp;_doc.appendChild(js);<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(</span><span style="color: #000000;">!</span><span style="color: #008000;">/*</span><span style="color: #008000;">@cc_on!@</span><span style="color: #008000;">*/</span><span style="color: #000000;">0</span><span style="color: #000000;">)&nbsp;{&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">if&nbsp;not&nbsp;IE</span><span style="color: #008000;"><br />
</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">Firefox2、Firefox3、Safari3.1+、Opera9.6+&nbsp;support&nbsp;js.onload</span><span style="color: #008000;"><br />
</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;js.onload&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">function</span><span style="color: #000000;">&nbsp;()&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alert('Firefox2、Firefox3、Safari3.</span><span style="color: #000000;">1</span><span style="color: #000000;">+</span><span style="color: #000000;">、Opera9.</span><span style="color: #000000;">6</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;support&nbsp;js.onload');<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</span><span style="color: #0000ff;">else</span><span style="color: #000000;">&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">IE6、IE7&nbsp;support&nbsp;js.onreadystatechange</span><span style="color: #008000;"><br />
</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;js.onreadystatechange&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">function</span><span style="color: #000000;">&nbsp;()&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(js.readyState&nbsp;</span><span style="color: #000000;">==</span><span style="color: #000000;">&nbsp;'loaded'&nbsp;</span><span style="color: #000000;">||</span><span style="color: #000000;">&nbsp;js.readyState&nbsp;</span><span style="color: #000000;">==</span><span style="color: #000000;">&nbsp;'complete')&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alert('IE6、IE7&nbsp;support&nbsp;js.onreadystatechange');<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">false</span><span style="color: #000000;">;<br />
}<br />
<br />
</span><span style="color: #008000;">//</span><span style="color: #008000;">execution&nbsp;function</span><span style="color: #008000;"><br />
</span><span style="color: #000000;">include_js('http:</span><span style="color: #008000;">//</span><span style="color: #008000;">www.planabc.net/wp-includes/js/jquery/jquery.js');</span></div>
<br />
<br />
<br />
</span></span>
<img src ="http://www.blogjava.net/Juizes361/aggbug/299861.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Juizes361/" target="_blank">残叶舞风</a> 2009-10-27 08:49 <a href="http://www.blogjava.net/Juizes361/articles/299861.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>分离JavaScript和HTML(转)</title><link>http://www.blogjava.net/Juizes361/articles/299169.html</link><dc:creator>残叶舞风</dc:creator><author>残叶舞风</author><pubDate>Wed, 21 Oct 2009 03:17:00 GMT</pubDate><guid>http://www.blogjava.net/Juizes361/articles/299169.html</guid><wfw:comment>http://www.blogjava.net/Juizes361/comments/299169.html</wfw:comment><comments>http://www.blogjava.net/Juizes361/articles/299169.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Juizes361/comments/commentRss/299169.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Juizes361/services/trackbacks/299169.html</trackback:ping><description><![CDATA[<span style="font-size: 10pt;"><span style="font-family: Comic Sans MS;"><br />
今天的目标是实现javascrīpt动作与html的分离，换句话说就是把onclick之类的属性赋值放到html的外面去。这样做的好处不仅仅是使
页面清晰，功能分离，更重要的，对于那些禁用Javascrīpt的浏览器来说，不会造成Error的出现（虽然很多时候功能还是不能实现，那是因为分离
js仅仅是确保访问性的第一步）。<br />
<br />
那么我们应该怎么做呢，直接在js里面这样写吗：<br />
</span></span>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #000000;">document.getElementById(</span><span style="color: #000000;">"</span><span style="color: #000000;">ELEMENT_ID</span><span style="color: #000000;">"</span><span style="color: #000000;">).onclick&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;FUNCTION_NAME();</span></div>
<span style="font-size: 10pt;"><span style="font-family: Comic Sans MS;"><br />
这是不能实现的，我过去一直不明白为什么它不能正常运转，在做VeryFTP的界面的时候，就苦于此而造成VeryFTP的页面里到处都是难看的onclick。那么现在来解决这个问题，究竟为什么呢？<br />
<br />
其实很简单，直接将这句写在js里，它将在js载入时被执行。而我们现在大多都有这样的好习惯——将&lt;scrīpt src=...一句写在head里，那么这句执行的时候，DOM还是不完整的，整个body都没有载入，那么又何来getElementById呢？<br />
<br />
为
了解决这个问题，理所当然地需要一个事件。我起初一直以为自己熟悉的window.onload事件实在页面刚一载入时触发，但是我错了，这个事件被触发
的时间是文档载入之后，以前曾经隐约有一个ondocumentready的印象，其实就是window.onload吧。所以当初WG的驿站因为
GoogleAD打不开而造成整个网站无法载入的问题恰可以用这个事件来解决问题，虽然往里面append脚本可能还有一点问题，但至少是可能的。（WG
别怪我哈，我当初是年幼无知哈，哈哈）<br />
<br />
于是这样写：<br />
</span></span>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #000000;">window.onload&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">function</span><span style="color: #000000;">(){<br />
&nbsp;&nbsp;addEvent();<br />
}<br />
</span><span style="color: #0000ff;">function</span><span style="color: #000000;">&nbsp;addEvent(){<br />
&nbsp;&nbsp;document.getElementById(</span><span style="color: #000000;">"</span><span style="color: #000000;">ELEMENT_ID</span><span style="color: #000000;">"</span><span style="color: #000000;">).onclick&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;FUNCTION_NAME();<br />
}</span></div>
<span style="font-size: 10pt;"><span style="font-family: Comic Sans MS;"><br />
这样就OK了吗？呵呵，没有结束呢。我发现这样写，刷新页面之后居然提示我添加信息完成！！（我页面的功能）。数据库里也多了好几行空白。不过这次问题好找，我几乎一眼就看出来了，呵呵。改成这样<br />
<br />
</span></span>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #000000;">window.onload&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">function</span><span style="color: #000000;">(){<br />
&nbsp;&nbsp;addEvent();<br />
}<br />
</span><span style="color: #0000ff;">function</span><span style="color: #000000;">&nbsp;addEvent(){<br />
&nbsp;&nbsp;document.getElementById(</span><span style="color: #000000;">"</span><span style="color: #000000;">ELEMENT_ID</span><span style="color: #000000;">"</span><span style="color: #000000;">).onclick&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">FUNCTION_NAME();</span><span style="color: #000000;">"</span><span style="color: #000000;">;<br />
}</span></div>
<span style="font-size: 10pt;"><span style="font-family: Comic Sans MS;"><br />
在
DOM中一切属性都是字符串。刷新，很自然地，函数没有在载入后就被自动执行。但是问题又出来了，点击按钮居然没有用了！！上帝啊，用Frefox自带的
DOM查看器查看呢，按钮上果然没有onclick这一属性。那么IE呢，IE中功能已经实现了，用IE的Develop
Bar查看DOM，果然onclick属性已经被加上去了。<br />
<br />
这样，问题就简单了，Firefox要求我们换一种更加规范的方法为它添加这个属性，而IE也是遵守这种规范的，那我们还犹豫什么：<br />
</span></span>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #000000;">window.onload&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">function</span><span style="color: #000000;">(){<br />
&nbsp;&nbsp;addEvent();<br />
}<br />
</span><span style="color: #0000ff;">function</span><span style="color: #000000;">&nbsp;addEvent(){<br />
&nbsp;&nbsp;document.getElementById(</span><span style="color: #000000;">"</span><span style="color: #000000;">ELEMENT_ID</span><span style="color: #000000;">"</span><span style="color: #000000;">).setAttribute(</span><span style="color: #000000;">"</span><span style="color: #000000;">onclick</span><span style="color: #000000;">"</span><span style="color: #000000;">,</span><span style="color: #000000;">"</span><span style="color: #000000;">FUNCTION_NAME();</span><span style="color: #000000;">"</span><span style="color: #000000;">);&nbsp;<br />
}</span></div>
<span style="font-size: 10pt;"><span style="font-family: Comic Sans MS;"><br />
这样就没有问题了，刷新Firefox，重新打开DOM查看器，这个属性已经上去了，运转正常。<br />
<br />
分离JS和HTML的方法终于理清了。<br />
<br />
<br />
</span></span>
<img src ="http://www.blogjava.net/Juizes361/aggbug/299169.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Juizes361/" target="_blank">残叶舞风</a> 2009-10-21 11:17 <a href="http://www.blogjava.net/Juizes361/articles/299169.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JSON介绍(转)</title><link>http://www.blogjava.net/Juizes361/articles/298443.html</link><dc:creator>残叶舞风</dc:creator><author>残叶舞风</author><pubDate>Thu, 15 Oct 2009 11:45:00 GMT</pubDate><guid>http://www.blogjava.net/Juizes361/articles/298443.html</guid><wfw:comment>http://www.blogjava.net/Juizes361/comments/298443.html</wfw:comment><comments>http://www.blogjava.net/Juizes361/articles/298443.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Juizes361/comments/commentRss/298443.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Juizes361/services/trackbacks/298443.html</trackback:ping><description><![CDATA[<span style="font-family: Comic Sans MS;"><span style="font-size: 10pt;"><span style="font-family: Comic Sans MS;"><span style="font-size: 10pt;">
<p style="text-indent: 20.65pt;"><strong><span style="font-size: 10.5pt;">JSON</span></strong><span style="font-size: 10.5pt;">(JavaScript Object Notation) </span><span style="font-size: 10.5pt;">是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。它基于JavaScript Programming Language, Standard ECMA-262 3rd Edition - December 1999的一个子集。 JSON采用完全独立于语言的文本格式，但是也使用了类似于C语言家族的习惯（包括C, C++, C#, Java, JavaScript, Perl, Python等）。这些特性使JSON成为理想的数据交换语言。</span></p>
<p style="margin: 0cm 0cm 0pt; text-indent: 21pt;"><span style="font-size: small;">尽管有许多宣传关于 XML 如何拥有跨平台，跨语言的优势，然而，除非应用于 Web Services，否则，在普通的 Web 应用中，开发者经常为 XML 的解析伤透了脑筋，无论是服务器端生成或处理 XML，还是客户端用 JavaScript 解析 XML，都常常导致复杂的代码，极低的开发效率。实际上，对于大多数 Web 应用来说，他们根本不需要复杂的 XML 来传输数据，XML 的扩展性很少具有优势，许多 AJAX 应用甚至直接返回 HTML 片段来构建动态 Web 页面。和返回 XML 并解析它相比，返回 HTML 片段大大降低了系统的复杂性，但同时缺少了一定的灵活性。 </span></p>
<p style="margin: 0cm 0cm 0pt; text-indent: 21pt;"><span style="font-size: small;">现在， JSON 为 Web 应用开发者提供了另一种数据交换格式。让我们来看看 JSON 到底是什么，同 XML 或 HTML 片段相比，JSON 提供了更好的简单性和灵活性。 </span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><strong><br />
</strong></p>
<p style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><strong>JSON</strong><strong>的优点</strong></p>
<ol type="1">
    <li style="margin: 0cm 0cm 0pt; text-align: left;"><span style="font-size: small;">轻量级的数据交换格式</span></li>
    <li style="margin: 0cm 0cm 0pt; text-align: left;"><span style="font-size: small;">人们读写更加容易</span></li>
    <li style="margin: 0cm 0cm 0pt; text-align: left;"><span style="font-size: small;">易于机器的解析和生成</span></li>
    <li style="margin: 0cm 0cm 0pt; text-align: left;"><span style="font-size: small;">能够通过JavaScript中eval()函数解析JSON</span></li>
    <li style="margin: 0cm 0cm 0pt; text-align: left;"><span style="font-size: small;">JSON支持多语言。包括：ActionScript, C, C#, ColdFusion, E, Java, JavaScript, ML, Objective CAML, Perl, PHP, Python, Rebol, Ruby, and Lua.</span></li>
</ol>
<p style="margin: 0cm 0cm 0pt;"><a name="N10072"><strong><br />
</strong></a></p>
<p style="margin: 0cm 0cm 0pt;"><a name="N10072"><strong>JSON </strong></a><strong>数据格式解析</strong></p>
<p style="margin: 0cm 0cm 0pt; text-indent: 21pt;"><span style="font-size: small;">和 XML 一样，JSON 也是基于纯文本的数据格式。由于 JSON 天生是为 JavaScript 准备的，因此，JSON 的数据格式非常简单，您可以用 JSON 传输一个简单的 String，Number，Boolean，也可以传输一个数组，或者一个复杂的 Object 对象。 </span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><strong><br />
</strong></p>
<p style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><strong>JSON</strong><strong>建构于两种结构：</strong></p>
<ul type="disc">
    <li style="margin: 0cm 0cm 0pt; text-align: left;"><span style="font-size: small;">&#8220;名称/值&#8221;对的集合（A collection of name/value pairs）。不同的语言中，它被理解为<em>对象（object）</em>，纪录（record），结构（struct），字典（dictionary），哈希表（hash table），有键列表（keyed list），或者关联数组 （associative array）。</span></li>
    <li style="margin: 0cm 0cm 0pt; text-align: left;"><span style="font-size: small;">值的有序列表（An ordered list of values）。在大部分语言中，它被理解为数组（array）。</span></li>
</ul>
<p style="margin: 0cm 0cm 0pt; text-indent: 21pt; text-align: left;" align="left"><span style="font-size: small;">这些都是常见的数据结构。事实上大部分现代计算机语言都以某种形式支持它们。这使得一种数据格式在同样基于这些结构的编程语言之间交换成为可能。</span></p>
<p><strong><span style="font-size: small;"><br />
</span></strong></p>
<p><strong><span style="font-size: small;">JSON具有以下这些形式：</span></strong></p>
<p style="margin: 0cm 0cm 0pt;"><span style="font-size: small;"><span style="font-family: Times New Roman;">1</span>）对象是一个无序的<span style="font-family: Times New Roman;">&#8220;&#8216;</span>名称<span style="font-family: Times New Roman;">/</span>值<span style="font-family: Times New Roman;">&#8217;</span>对<span style="font-family: Times New Roman;">&#8221;</span>集合。一个对象以<span style="font-family: Times New Roman;">&#8220;{&#8221;</span>（左括号）开始，<span style="font-family: Times New Roman;">&#8220;}&#8221;</span>（右括号）结束。每个<span style="font-family: Times New Roman;">&#8220;</span>名称<span style="font-family: Times New Roman;">&#8221;</span>后跟一个<span style="font-family: Times New Roman;">&#8220;:&#8221;</span>（冒号）；<span style="font-family: Times New Roman;">&#8220;&#8216;</span>名称<span style="font-family: Times New Roman;">/</span>值<span style="font-family: Times New Roman;">&#8217; </span>对<span style="font-family: Times New Roman;">&#8221;</span>之间使用<span style="font-family: Times New Roman;">&#8220;,&#8221;</span>（逗号）分隔。</span></p>
<p><span style="font-size: 10.5pt;">如：</span></p>
</span></span>
<div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; background-color: rgb(238, 238, 238); font-size: 13px; width: 98%;"><span style="color: rgb(0, 0, 0);">{</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">city</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">:</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">Beijing</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">,</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">street</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">:</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">&nbsp;Chaoyang&nbsp;Road&nbsp;</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">,</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">postcode</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">:</span><span style="color: rgb(0, 0, 0);">100025</span><span style="color: rgb(0, 0, 0);">}</span></div>
<span style="font-family: Comic Sans MS;"><span style="font-size: 10pt;">
<p style="margin: 0cm 0cm 0pt;"><span style="font-size: small;"><span style="font-family: Times New Roman;">2</span>）数组是值（<span style="font-family: Times New Roman;">value</span>）的有序集合。一个数组以<span style="font-family: Times New Roman;">&#8220;[&#8221;</span>（左中括号）开始，<span style="font-family: Times New Roman;">&#8220;]&#8221;</span>（右中括号）结束。值之间使用<span style="font-family: Times New Roman;">&#8220;,&#8221;</span>（逗号）分隔。</span></p>
<p><span style="font-size: 10.5pt;">如：</span></p>
</span></span><br />
<div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; background-color: rgb(238, 238, 238); font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: rgb(0, 0, 0);">[<br />
{</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">UserID</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">:</span><span style="color: rgb(0, 0, 0);">11</span><span style="color: rgb(0, 0, 0);">,&nbsp;</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">Name</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">:{</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">FirstName</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">:</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">Truly</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">,</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">LastName</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">:</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">Zhu</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">},&nbsp;</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">Email</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">:</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">zhuleipro@hotmail.com</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">},<br />
{</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">UserID</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">:</span><span style="color: rgb(0, 0, 0);">12</span><span style="color: rgb(0, 0, 0);">,&nbsp;</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">Name</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">:{</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">FirstName</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">:</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">Jeffrey</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">,</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">LastName</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">:</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">Richter</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">},&nbsp;</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">Email</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">:</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">xxx◎xxx.com</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">},<br />
{</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">UserID</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">:</span><span style="color: rgb(0, 0, 0);">13</span><span style="color: rgb(0, 0, 0);">,&nbsp;</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">Name</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">:{</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">FirstName</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">:</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">Scott</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">,</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">LastName</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">:</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">Gu</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">},&nbsp;</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">Email</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">:</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">xxx2◎xxx2.com</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">}<br />
]<br />
</span></div>
<span style="font-family: Comic Sans MS;"><span style="font-size: 10pt;">
<p style="margin: 0cm 0cm 0pt;"><span style="font-size: small;"><span style="font-family: Times New Roman;">3</span>）值（<span style="font-family: Times New Roman;">value</span>）可以是双引号括起来的字符串（<span style="font-family: Times New Roman;">string</span>）、数值<span style="font-family: Times New Roman;">(number)</span>、<span style="font-family: Times New Roman;">true</span>、<span style="font-family: Times New Roman;">false</span>、<span style="font-family: Times New Roman;"> null</span>、对象（<span style="font-family: Times New Roman;">object</span>）或者数组（<span style="font-family: Times New Roman;">array</span>）。这些结构可以嵌套。</span></p>
<p><span style="font-size: 10.5pt;">如：</span></p>
</span></span>
<div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; background-color: rgb(238, 238, 238); font-size: 13px; width: 98%;"><span style="color: rgb(0, 0, 0);">{</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">UserID</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">:</span><span style="color: rgb(0, 0, 0);">13</span><span style="color: rgb(0, 0, 0);">,&nbsp;</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">Name</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">:{</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">FirstName</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">:</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">Scott</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">,</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">LastName</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">:</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">Gu</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">},&nbsp;</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">Email</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">:</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">xxx2◎xxx2.com</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">}</span></div>
<span style="font-family: Comic Sans MS;"><span style="font-size: 10pt;">
<p style="margin: 0cm 0cm 0pt;"><span style="font-size: small;"><span style="font-family: Times New Roman;"><br />
</span></span></p>
<p style="margin: 0cm 0cm 0pt;"><span style="font-size: small;"><span style="font-family: Times New Roman;">4</span>）字符串（<span style="font-family: Times New Roman;">string</span>）是由双引号包围的任意数量<span style="font-family: Times New Roman;">Unicode</span>字符的集合，使用反斜线转义。一个字符（<span style="font-family: Times New Roman;">character</span>）即一个单独的字符串（<span style="font-family: Times New Roman;">character string</span>）。</span></p>
<p style="margin: 0cm 0cm 0pt;"><span style="font-size: small;">字符串（<span style="font-family: Times New Roman;">string</span>）与<span style="font-family: Times New Roman;">C</span>或者<span style="font-family: Times New Roman;">Java</span>的字符串非常相似。</span></p>
<p style="margin: 0cm 0cm 0pt;"><span style="font-size: small;"><span style="font-family: Times New Roman;">5</span>）数值（<span style="font-family: Times New Roman;">number</span>）也与<span style="font-family: Times New Roman;">C</span>或者<span style="font-family: Times New Roman;">Java</span>的数值非常相似。除去未曾使用的八进制与十六进制格式。除去一些编码细节。</span></p>
<p>如：</p>
</span></span><span style="font-family: Comic Sans MS;"><span style="font-size: 10pt;"><span style="font-size: small;">这与绝大多数编程语言的表示方法一致，例如：{12345，-12345}</span></span></span><span style="font-family: Comic Sans MS;"><span style="font-size: 10pt;">
<pre><span style="font-size: 8.5pt; color: black;">&nbsp;</span></pre>
<pre><span style="font-size: 8.5pt; color: black;">&nbsp;</span></pre>
<p style="margin: 0cm 0cm 0pt;"><a name="N1010D"><strong>JavaScript </strong></a><strong>处理 JSON 数据 </strong></p>
<p style="margin: 0cm 0cm 0pt; text-indent: 21pt;"><span style="font-size: small;">上面介绍了如何用 JSON 表示数据，接下来，我们还要解决如何在服务器端生成 JSON 格式的数据以便发送到客户端，以及客户端如何使用 JavaScript 处理 JSON 格式的数据。</span></p>
<p style="margin: 0cm 0cm 0pt; text-indent: 21pt;"><span style="font-size: small;">我们先讨论如何在 Web 页面中用 JavaScript 处理 JSON 数据。我们通过一个简单的 JavaScript 方法就能看到客户端如何将 JSON 数据表示给用户：</span></p>
</span></span><br />
<div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; background-color: rgb(238, 238, 238); font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: rgb(0, 0, 255);">function</span><span style="color: rgb(0, 0, 0);">&nbsp;handleJson()&nbsp;{&nbsp;<br />
&nbsp; </span><span style="color: rgb(0, 0, 255);">var</span><span style="color: rgb(0, 0, 0);">&nbsp;j</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">{</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">name</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">:</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">Michael</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">,</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">address</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">city</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">:</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">Beijing</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">,</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">street</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">:</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">&nbsp;Chaoyang&nbsp;Road&nbsp;</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">,</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">postcode</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">:</span><span style="color: rgb(0, 0, 0);">100025</span><span style="color: rgb(0, 0, 0);">}<br />
&nbsp;};&nbsp;<br />
&nbsp; document.write(j.name);&nbsp;<br />
&nbsp; document.write(j.address.city);&nbsp;<br />
&nbsp;}</span></div>
<span style="font-family: Comic Sans MS;"><span style="font-size: 10pt;">
<p style="margin: 0cm 0cm 0pt;"><span style="font-size: small;">假定服务器返回的 JSON 数据是上文的：</span></p>
</span></span><br />
<div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; background-color: rgb(238, 238, 238); font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: rgb(0, 0, 0);">{</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">name</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">:</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">Michael</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">,</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">address</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">:<br />
&nbsp;&nbsp;&nbsp; {</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">city</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">:</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">Beijing</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">,</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">street</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">:</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">&nbsp;Chaoyang&nbsp;Road&nbsp;</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">,</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">postcode</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">:</span><span style="color: rgb(0, 0, 0);">100025</span><span style="color: rgb(0, 0, 0);">}<br />
}</span></div>
<span style="font-family: Comic Sans MS;"><span style="font-size: 10pt;">
<p style="margin: 0cm 0cm 0pt;"><span style="font-size: small;">只需将其赋值给一个 JavaScript 变量，就可以立刻使用该变量并更新页面中的信息了，相比 XML 需要从 DOM 中读取各种节点而言，JSON 的使用非常容易。我们需要做的仅仅是发送一个 Ajax 请求，然后将服务器返回的 JSON 数据赋值给一个变量即可。有许多 Ajax 框架早已包含了处理 JSON 数据的能力，例如 Prototype（一个流行的 JavaScript 库：http://prototypejs.org）提供了 evalJSON() 方法，能直接将服务器返回的 JSON 文本变成一个 JavaScript 变量：</span></p>
</span></span><br />
<div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; background-color: rgb(238, 238, 238); font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: rgb(0, 0, 255);">new</span><span style="color: rgb(0, 0, 0);">&nbsp;Ajax.Request(</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">http://url</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">,&nbsp;{<br />
&nbsp;method:&nbsp;</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">get</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">,<br />
&nbsp;onSuccess:&nbsp;</span><span style="color: rgb(0, 0, 255);">function</span><span style="color: rgb(0, 0, 0);">(transport)&nbsp;{<br />
&nbsp;&nbsp;&nbsp; </span><span style="color: rgb(0, 0, 255);">var</span><span style="color: rgb(0, 0, 0);">&nbsp;json&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;transport.responseText.evalJSON();<br />
&nbsp;&nbsp;&nbsp; </span><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);">&nbsp;TODO:&nbsp;document.write(json.xxx);</span><span style="color: rgb(0, 128, 0);"><br />
</span><span style="color: rgb(0, 0, 0);">&nbsp;}<br />
&nbsp;});</span></div>
<span style="font-family: Comic Sans MS;"><span style="font-size: 10pt;">
<p style="margin: 0cm 0cm 0pt;"><a name="N1012F"><strong><br />
</strong></a></p>
<p style="margin: 0cm 0cm 0pt;"><a name="N1012F"><strong>服务器端输出 JSON 格式数据</strong></a></p>
<p style="margin: 0cm 0cm 0pt; text-indent: 21pt;"><span style="font-size: small;">下面我们讨论如何在服务器端输出 JSON 格式的数据。以 Java 为例，我们将演示将一个 Java 对象编码为 JSON 格式的文本。</span></p>
<p style="margin: 0cm 0cm 0pt;"><span style="font-size: small;">将 String 对象编码为 JSON 格式时，只需处理好特殊字符即可。另外，必须用 (") 而非 (') 表示字符串：</span></p>
</span></span><br />
<div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; background-color: rgb(238, 238, 238); font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: rgb(0, 0, 0);">&nbsp;static&nbsp;String&nbsp;string2Json(String&nbsp;s)&nbsp;{<br />
&nbsp;&nbsp;&nbsp; StringBuilder&nbsp;sb&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">new</span><span style="color: rgb(0, 0, 0);">&nbsp;StringBuilder(s.length()</span><span style="color: rgb(0, 0, 0);">+</span><span style="color: rgb(0, 0, 0);">20</span><span style="color: rgb(0, 0, 0);">);<br />
&nbsp;&nbsp;&nbsp; sb.append('</span><span style="color: rgb(0, 0, 0);">""</span><span style="color: rgb(0, 0, 0);">');<br />
&nbsp;&nbsp;&nbsp; </span><span style="color: rgb(0, 0, 255);">for</span><span style="color: rgb(0, 0, 0);">&nbsp;(</span><span style="color: rgb(0, 0, 255);">int</span><span style="color: rgb(0, 0, 0);">&nbsp;i</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">0</span><span style="color: rgb(0, 0, 0);">;&nbsp;i</span><span style="color: rgb(0, 0, 0);">&lt;</span><span style="color: rgb(0, 0, 0);">s.length();&nbsp;i</span><span style="color: rgb(0, 0, 0);">++</span><span style="color: rgb(0, 0, 0);">)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: rgb(0, 0, 255);">char</span><span style="color: rgb(0, 0, 0);">&nbsp;c&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;s.charAt(i);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: rgb(0, 0, 255);">switch</span><span style="color: rgb(0, 0, 0);">&nbsp;(c)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: rgb(0, 0, 255);">case</span><span style="color: rgb(0, 0, 0);">&nbsp;'</span><span style="color: rgb(0, 0, 0);">""</span><span style="color: rgb(0, 0, 0);">':<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sb.append(</span><span style="color: rgb(0, 0, 0);">""""""</span><span style="color: rgb(0, 0, 0);">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: rgb(0, 0, 255);">break</span><span style="color: rgb(0, 0, 0);">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: rgb(0, 0, 255);">case</span><span style="color: rgb(0, 0, 0);">&nbsp;'</span><span style="color: rgb(0, 0, 0);">""</span><span style="color: rgb(0, 0, 0);">':<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sb.append(</span><span style="color: rgb(0, 0, 0);">""""""</span><span style="color: rgb(0, 0, 0);">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: rgb(0, 0, 255);">break</span><span style="color: rgb(0, 0, 0);">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: rgb(0, 0, 255);">case</span><span style="color: rgb(0, 0, 0);">&nbsp;'</span><span style="color: rgb(0, 0, 0);">/</span><span style="color: rgb(0, 0, 0);">':<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sb.append(</span><span style="color: rgb(0, 0, 0);">"""</span><span style="color: rgb(0, 0, 0);">/</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: rgb(0, 0, 255);">break</span><span style="color: rgb(0, 0, 0);">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: rgb(0, 0, 255);">case</span><span style="color: rgb(0, 0, 0);">&nbsp;'</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">b':<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sb.append(</span><span style="color: rgb(0, 0, 0);">"""</span><span style="color: rgb(0, 0, 0);">b</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case&nbsp;'</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">f':<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sb.append(</span><span style="color: rgb(0, 0, 0);">"""</span><span style="color: rgb(0, 0, 0);">f</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: rgb(0, 0, 255);">break</span><span style="color: rgb(0, 0, 0);">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: rgb(0, 0, 255);">case</span><span style="color: rgb(0, 0, 0);">&nbsp;'</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">n':<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sb.append(</span><span style="color: rgb(0, 0, 0);">"""</span><span style="color: rgb(0, 0, 0);">n</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case&nbsp;'</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">r':<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sb.append(</span><span style="color: rgb(0, 0, 0);">"""</span><span style="color: rgb(0, 0, 0);">r</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: rgb(0, 0, 255);">break</span><span style="color: rgb(0, 0, 0);">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: rgb(0, 0, 255);">case</span><span style="color: rgb(0, 0, 0);">&nbsp;'</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">t':<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sb.append(</span><span style="color: rgb(0, 0, 0);">"""</span><span style="color: rgb(0, 0, 0);">t</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; default:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sb.append(c);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; sb.append('</span><span style="color: rgb(0, 0, 0);">""</span><span style="color: rgb(0, 0, 0);">');<br />
&nbsp;&nbsp;&nbsp; return&nbsp;sb.toString();<br />
&nbsp;} <br />
</span></div>
<span style="font-family: Comic Sans MS;"><span style="font-size: 10pt;">
<p style="margin: 0cm 0cm 0pt;"><span style="font-size: small;"><br />
</span></p>
<p style="margin: 0cm 0cm 0pt;"><span style="font-size: small;">将 Number 表示为 JSON 就容易得多，利用 Java 的多态，我们可以处理 Integer，Long，Float 等多种 Number 格式：</span></p>
</span></span><br />
<div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; background-color: rgb(238, 238, 238); font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: rgb(0, 0, 0);">&nbsp;static&nbsp;String&nbsp;number2Json(Number&nbsp;number)&nbsp;{<br />
&nbsp;&nbsp;&nbsp; </span><span style="color: rgb(0, 0, 255);">return</span><span style="color: rgb(0, 0, 0);">&nbsp;number.toString();<br />
&nbsp;} <br />
</span></div>
<span style="font-family: Comic Sans MS;"><span style="font-size: 10pt;">
<p style="margin: 0cm 0cm 0pt;"><span style="font-size: small;"><br />
</span></p>
<p style="margin: 0cm 0cm 0pt;"><span style="font-size: small;">Boolean 类型也可以直接通过 toString() 方法得到 JSON 的表示：</span></p>
</span></span><br />
<div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; background-color: rgb(238, 238, 238); font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: rgb(0, 0, 0);"> static&nbsp;String&nbsp;boolean2Json(Boolean&nbsp;bool)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">return</span><span style="color: rgb(0, 0, 0);">&nbsp;bool.toString();<br />
&nbsp;}<br />
</span></div>
<span style="font-family: Comic Sans MS;"><span style="font-size: 10pt;">
<p style="margin: 0cm 0cm 0pt;"><span style="font-size: small;"><br />
</span></p>
<p style="margin: 0cm 0cm 0pt;"><span style="font-size: small;">要将数组编码为 JSON 格式，可以通过循环将每一个元素编码出来：</span></p>
</span></span><br />
<div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; background-color: rgb(238, 238, 238); font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: rgb(0, 0, 0);">&nbsp;static&nbsp;String&nbsp;array2Json(Object[]&nbsp;array)&nbsp;{<br />
&nbsp;&nbsp;&nbsp; </span><span style="color: rgb(0, 0, 255);">if</span><span style="color: rgb(0, 0, 0);">&nbsp;(array.length</span><span style="color: rgb(0, 0, 0);">==</span><span style="color: rgb(0, 0, 0);">0</span><span style="color: rgb(0, 0, 0);">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: rgb(0, 0, 255);">return</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">[]</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;StringBuilder&nbsp;sb&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">new</span><span style="color: rgb(0, 0, 0);">&nbsp;StringBuilder(array.length&nbsp;</span><span style="color: rgb(0, 0, 0);">&lt;&lt;</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 0);">4</span><span style="color: rgb(0, 0, 0);">);<br />
&nbsp;&nbsp;&nbsp; sb.append('[');<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">for</span><span style="color: rgb(0, 0, 0);">&nbsp;(Object&nbsp;o&nbsp;:&nbsp;array)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sb.append(toJson(o));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sb.append(',');<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; </span><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);">&nbsp;将最后添加的&nbsp;','&nbsp;变为&nbsp;']':</span><span style="color: rgb(0, 128, 0);"><br />
</span><span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp; sb.setCharAt(sb.length()</span><span style="color: rgb(0, 0, 0);">-</span><span style="color: rgb(0, 0, 0);">1</span><span style="color: rgb(0, 0, 0);">,&nbsp;']');<br />
&nbsp;&nbsp;&nbsp; </span><span style="color: rgb(0, 0, 255);">return</span><span style="color: rgb(0, 0, 0);">&nbsp;sb.toString();<br />
&nbsp;} <br />
</span></div>
<span style="font-family: Comic Sans MS;"><span style="font-size: 10pt;">
<p style="margin: 0cm 0cm 0pt;"><span style="font-size: small;"><br />
</span></p>
<p style="margin: 0cm 0cm 0pt;"><span style="font-size: small;">最后，我们需要将 Map&lt;String, Object&gt; 编码为 JSON 格式，因为 JavaScript 的 Object 实际上对应的是 Java 的 Map&lt;String, Object&gt; 。该方法如下：</span></p>
</span></span><br />
<div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; background-color: rgb(238, 238, 238); font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: rgb(0, 0, 0);">static&nbsp;String&nbsp;map2Json(Map</span><span style="color: rgb(0, 0, 0);">&lt;</span><span style="color: rgb(0, 0, 0);">String,&nbsp;Object</span><span style="color: rgb(0, 0, 0);">&gt;</span><span style="color: rgb(0, 0, 0);">&nbsp;map)&nbsp;{<br />
&nbsp;&nbsp;&nbsp; </span><span style="color: rgb(0, 0, 255);">if</span><span style="color: rgb(0, 0, 0);">&nbsp;(map.isEmpty())<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: rgb(0, 0, 255);">return</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">{}</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;StringBuilder&nbsp;sb&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">new</span><span style="color: rgb(0, 0, 0);">&nbsp;StringBuilder(map.size()&nbsp;</span><span style="color: rgb(0, 0, 0);">&lt;&lt;</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 0);">4</span><span style="color: rgb(0, 0, 0);">);<br />
&nbsp;&nbsp;&nbsp; sb.append('{');<br />
&nbsp;&nbsp;&nbsp; Set</span><span style="color: rgb(0, 0, 0);">&lt;</span><span style="color: rgb(0, 0, 0);">String</span><span style="color: rgb(0, 0, 0);">&gt;</span><span style="color: rgb(0, 0, 0);">&nbsp;keys&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;map.keySet();<br />
&nbsp;&nbsp;&nbsp; </span><span style="color: rgb(0, 0, 255);">for</span><span style="color: rgb(0, 0, 0);">&nbsp;(String&nbsp;key&nbsp;:&nbsp;keys)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Object&nbsp;value&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;map.get(key);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sb.append('</span><span style="color: rgb(0, 0, 0);">""</span><span style="color: rgb(0, 0, 0);">');<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sb.append(key);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sb.append('</span><span style="color: rgb(0, 0, 0);">""</span><span style="color: rgb(0, 0, 0);">');<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sb.append(':');<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sb.append(toJson(value));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sb.append(',');<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; </span><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);">&nbsp;将最后的&nbsp;','&nbsp;变为&nbsp;'}':</span><span style="color: rgb(0, 128, 0);"><br />
</span><span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp; sb.setCharAt(sb.length()</span><span style="color: rgb(0, 0, 0);">-</span><span style="color: rgb(0, 0, 0);">1</span><span style="color: rgb(0, 0, 0);">,&nbsp;'}');<br />
<br />
&nbsp;&nbsp;&nbsp; </span><span style="color: rgb(0, 0, 255);">return</span><span style="color: rgb(0, 0, 0);">&nbsp;sb.toString();<br />
&nbsp;} <br />
</span></div>
<span style="font-family: Comic Sans MS;"><span style="font-size: 10pt;">
<p style="margin: 0cm 0cm 0pt;"><span style="font-size: small;"><br />
</span></p>
<p style="margin: 0cm 0cm 0pt;"><span style="font-size: small;">为了统一处理任意的 Java 对象，我们编写一个入口方法 toJson(Object)，能够将任意的 Java 对象编码为 JSON 格式：</span></p>
</span></span><br />
<div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; background-color: rgb(238, 238, 238); font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: rgb(0, 0, 0);">&nbsp;public&nbsp;static&nbsp;String&nbsp;toJson(Object&nbsp;o)&nbsp;{<br />
&nbsp;&nbsp;&nbsp; </span><span style="color: rgb(0, 0, 255);">if</span><span style="color: rgb(0, 0, 0);">&nbsp;(o</span><span style="color: rgb(0, 0, 0);">==</span><span style="color: rgb(0, 0, 255);">null</span><span style="color: rgb(0, 0, 0);">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: rgb(0, 0, 255);">return</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">null</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">if</span><span style="color: rgb(0, 0, 0);">&nbsp;(o&nbsp;</span><span style="color: rgb(0, 0, 255);">instanceof</span><span style="color: rgb(0, 0, 0);">&nbsp;String)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: rgb(0, 0, 255);">return</span><span style="color: rgb(0, 0, 0);">&nbsp;string2Json((String)o);<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">if</span><span style="color: rgb(0, 0, 0);">&nbsp;(o&nbsp;</span><span style="color: rgb(0, 0, 255);">instanceof</span><span style="color: rgb(0, 0, 0);">&nbsp;Boolean)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: rgb(0, 0, 255);">return</span><span style="color: rgb(0, 0, 0);">&nbsp;boolean2Json((Boolean)o);<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">if</span><span style="color: rgb(0, 0, 0);">&nbsp;(o&nbsp;</span><span style="color: rgb(0, 0, 255);">instanceof</span><span style="color: rgb(0, 0, 0);">&nbsp;Number)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: rgb(0, 0, 255);">return</span><span style="color: rgb(0, 0, 0);">&nbsp;number2Json((Number)o);<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">if</span><span style="color: rgb(0, 0, 0);">&nbsp;(o&nbsp;</span><span style="color: rgb(0, 0, 255);">instanceof</span><span style="color: rgb(0, 0, 0);">&nbsp;Map)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: rgb(0, 0, 255);">return</span><span style="color: rgb(0, 0, 0);">&nbsp;map2Json((Map</span><span style="color: rgb(0, 0, 0);">&lt;</span><span style="color: rgb(0, 0, 0);">String,&nbsp;Object</span><span style="color: rgb(0, 0, 0);">&gt;</span><span style="color: rgb(0, 0, 0);">)o);<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">if</span><span style="color: rgb(0, 0, 0);">&nbsp;(o&nbsp;</span><span style="color: rgb(0, 0, 255);">instanceof</span><span style="color: rgb(0, 0, 0);">&nbsp;Object[])<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: rgb(0, 0, 255);">return</span><span style="color: rgb(0, 0, 0);">&nbsp;array2Json((Object[])o);<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">throw</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">new</span><span style="color: rgb(0, 0, 0);">&nbsp;RuntimeException(</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">Unsupported&nbsp;type:&nbsp;</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 0);">+</span><span style="color: rgb(0, 0, 0);">&nbsp;o.getClass().getName());<br />
&nbsp;} <br />
</span></div>
<span style="font-family: Comic Sans MS;"><span style="font-size: 10pt;">
<p style="margin: 0cm 0cm 0pt;"><span style="font-size: small;">&nbsp;</span></p>
<p style="margin: 0cm 0cm 0pt;"><span style="font-size: small;">&nbsp;&nbsp;&nbsp;&nbsp; 我们并未对 Java 对象作严格的检查。不被支持的对象（例如 List）将直接抛出 RuntimeException 。此外，为了保证输出的 JSON 是有效的，Map&lt;String, Object&gt; 对象的 Key 也不能包含特殊字符。细心的读者可能还会发现循环引用的对象会引发无限递归，例如，精心构造一个循环引用的 Map，就可以检测到 StackOverflowException：</span></p>
</span></span><br />
<div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; background-color: rgb(238, 238, 238); font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: rgb(0, 0, 0);"> @Test(expected</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">StackOverflowError.</span><span style="color: rgb(0, 0, 255);">class</span><span style="color: rgb(0, 0, 0);">)<br />
&nbsp;</span><span style="color: rgb(0, 0, 255);">public</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">void</span><span style="color: rgb(0, 0, 0);">&nbsp;testRecurrsiveMap2Json()&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;Map</span><span style="color: rgb(0, 0, 0);">&lt;</span><span style="color: rgb(0, 0, 0);">String,&nbsp;Object</span><span style="color: rgb(0, 0, 0);">&gt;</span><span style="color: rgb(0, 0, 0);">&nbsp;map&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">new</span><span style="color: rgb(0, 0, 0);">&nbsp;HashMap</span><span style="color: rgb(0, 0, 0);">&lt;</span><span style="color: rgb(0, 0, 0);">String,&nbsp;Object</span><span style="color: rgb(0, 0, 0);">&gt;</span><span style="color: rgb(0, 0, 0);">();<br />
&nbsp;&nbsp;&nbsp;&nbsp;map.put(</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">key</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">,&nbsp;map);<br />
&nbsp;&nbsp;&nbsp;&nbsp;JsonUtil.map2Json(map);<br />
&nbsp;}<br />
</span></div>
<span style="font-family: Comic Sans MS;"><span style="font-size: 10pt;">
<p style="margin: 0cm 0cm 0pt; text-indent: 21pt;"><span style="font-size: small;"><br />
</span></p>
<p style="margin: 0cm 0cm 0pt; text-indent: 21pt;"><span style="font-size: small;">好在服务器处理的 JSON 数据最终都应该转化为简单的 JavaScript 对象，因此，递归引用的可能性很小。</span></p>
<p style="margin: 0cm 0cm 0pt; text-indent: 21pt;"><span style="font-size: small;">最后，通过 Servlet 或 MVC 框架输出 JSON 时，需要设置正确的 MIME 类型（application/json）和字符编码。假定服务器使用 UTF-8 编码，则可以使用以下代码输出编码后的 JSON 文本：</span></p>
<p style="margin: 0cm 0cm 0pt;"><span style="font-size: small;">&nbsp;</span></p>
</span></span>
<div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; background-color: rgb(238, 238, 238); font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: rgb(0, 0, 0);"> @Test(expected</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">StackOverflowError.</span><span style="color: rgb(0, 0, 255);">class</span><span style="color: rgb(0, 0, 0);">)<br />
</span><span style="color: rgb(0, 0, 255);">public</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">void</span><span style="color: rgb(0, 0, 0);">&nbsp;testRecurrsiveMap2Json()&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;Map</span><span style="color: rgb(0, 0, 0);">&lt;</span><span style="color: rgb(0, 0, 0);">String,&nbsp;Object</span><span style="color: rgb(0, 0, 0);">&gt;</span><span style="color: rgb(0, 0, 0);">&nbsp;map&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">new</span><span style="color: rgb(0, 0, 0);">&nbsp;HashMap</span><span style="color: rgb(0, 0, 0);">&lt;</span><span style="color: rgb(0, 0, 0);">String,&nbsp;Object</span><span style="color: rgb(0, 0, 0);">&gt;</span><span style="color: rgb(0, 0, 0);">();<br />
&nbsp;&nbsp;&nbsp;&nbsp;map.put(</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">key</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">,&nbsp;map);<br />
&nbsp;&nbsp;&nbsp;&nbsp;JsonUtil.map2Json(map);<br />
}</span></div>
<span style="font-family: Comic Sans MS;"><span style="font-size: 10pt;"><br />
<p style="margin: 0cm 0cm 0pt;"><span style="font-size: small;">&nbsp;</span></p>
</span></span></span></span>
<img src ="http://www.blogjava.net/Juizes361/aggbug/298443.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Juizes361/" target="_blank">残叶舞风</a> 2009-10-15 19:45 <a href="http://www.blogjava.net/Juizes361/articles/298443.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Prototype是如何扩展DOM的(转)</title><link>http://www.blogjava.net/Juizes361/articles/298440.html</link><dc:creator>残叶舞风</dc:creator><author>残叶舞风</author><pubDate>Thu, 15 Oct 2009 11:30:00 GMT</pubDate><guid>http://www.blogjava.net/Juizes361/articles/298440.html</guid><wfw:comment>http://www.blogjava.net/Juizes361/comments/298440.html</wfw:comment><comments>http://www.blogjava.net/Juizes361/articles/298440.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Juizes361/comments/commentRss/298440.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Juizes361/services/trackbacks/298440.html</trackback:ping><description><![CDATA[<span style="font-family: Comic Sans MS;"><span style="font-size: 10pt;">
<p>　　Prototype框架最大的部分就是对DOM的扩展。Prototype框架里的$()函数返回一个网页DOM元素，框架给这个元素添加了很
多方便的方法。举个例子：你可以写这样的代码 $('comments').addClassName('active').show()
，用来取得ID是&#8220;comments&#8221;的元素，给它添加一个CSS的ClassName并且显示它（假设之前是隐藏的）。本来在JavaScript
里，&#8220;comments&#8221;元素是没有这些方法可用的；这是怎么实现的呢？这篇文章揭示了几个在Prototype框架里用到的技巧。</p>
<p>　　用 Element.addMethods() 添加你自己的方法</p>
<p>　　如果你有自己的DOM方法想要添加到Prototype的那一大堆方法里去凑凑热闹，没问题！Prototype也为此提供了一种机制。假设你有一组函数封装在一个对象里，只要把这个对象交给 Element.addMethods() 就可以了：&nbsp;</p>
<div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; background-color: rgb(238, 238, 238); font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: rgb(0, 0, 255);">var</span><span style="color: rgb(0, 0, 0);">&nbsp;MyUtils&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;{<br />
truncate:&nbsp;</span><span style="color: rgb(0, 0, 255);">function</span><span style="color: rgb(0, 0, 0);">(element,&nbsp;length){<br />
&nbsp;　element&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;$(element);<br />
&nbsp;　</span><span style="color: rgb(0, 0, 255);">return</span><span style="color: rgb(0, 0, 0);">&nbsp;element.update(element.innerHTML.truncate(length));<br />
},<br />
updateAndMark:&nbsp;</span><span style="color: rgb(0, 0, 255);">function</span><span style="color: rgb(0, 0, 0);">(element,&nbsp;html){<br />
&nbsp;　</span><span style="color: rgb(0, 0, 255);">return</span><span style="color: rgb(0, 0, 0);">&nbsp;$(element).update(html).addClassName('updated');<br />
}<br />
}<br />
Element.addMethods(MyUtils);<br />
</span><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);">&nbsp;现在你可以：</span><span style="color: rgb(0, 128, 0);"><br />
</span><span style="color: rgb(0, 0, 0);">$('explanation').truncate(</span><span style="color: rgb(0, 0, 0);">100</span><span style="color: rgb(0, 0, 0);">);</span></div>
<br />
<p>　　唯一需要注意的事情就是要确保这些方法的第一个参数是元素自身。在你的方法里，你还可以在最后返回这个元素以实现可链性（或者，就像例子里实践的那样，实现自身返回元素的方法）。</p>
<p>　　Element.extend() 方法</p>
<p>　　大多数扩展DOM方法都是封装在Element.Methods对象里的，并被复制到Element对象（提供方便之用）。这些方法都把要操作的元素作为第一个参数来接受。 </p>
<br />
<div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; background-color: rgb(238, 238, 238); font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: rgb(0, 0, 0);">Element.hide('comments');<br />
</span><span style="color: rgb(0, 0, 255);">var</span><span style="color: rgb(0, 0, 0);">&nbsp;div_height&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;Element.getHeight(my_div);<br />
Element.addClassName('contactform',&nbsp;'pending');</span></div>
<br />
</span></span><span style="font-family: Comic Sans MS;"><span style="font-size: 10pt;">　　</span></span><span style="font-family: Comic Sans MS;"><span style="font-size: 10pt;">这些例子可谓简明易懂了，但是我们还有更好的方式。如果你想要操纵一个元素，你可以把这个元素交给Element.extend()，它会把所有的那些方法都直接复制给这个元素。例如，创建一个新的元素并且控制它： <br />
<br />
<div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; background-color: rgb(238, 238, 238); font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: rgb(0, 0, 255);">var</span><span style="color: rgb(0, 0, 0);">&nbsp;my_div&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;document.createElement('div');<br />
Element.extend(my_div);<br />
my_div.addClassName('pending').hide();<br />
</span><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);">&nbsp;把元素插入到文档</span><span style="color: rgb(0, 128, 0);"><br />
</span><span style="color: rgb(0, 0, 0);">document.body.appendChild(my_div);</span></div>
<br />
<p>　　我们的方法调用变得更短更直观了！正如上面提到的，Element.extend()
从Element.Methods把所有的方法复制到我们的元素，元素自动成为所有那些方法函数的第一个参数。extend()方法足够机灵，不会在同一
个元素上尝试操作两次。更牛的是，美钞函数 $() 通过这种机制扩展了交给它的每个元素。</p>
<p>　　此外，Element.extend() 机制也适用于在FORM元素上使用Form.Methods的方法，以及在INPUT、TEXTAREA 和 SELECT 元素上使用Form.Element.Methods的方法： </p>
</span></span>
<div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; background-color: rgb(238, 238, 238); font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: rgb(0, 0, 255);">var</span><span style="color: rgb(0, 0, 0);">&nbsp;contact_data&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;$('contactform').serialize();<br />
</span><span style="color: rgb(0, 0, 255);">var</span><span style="color: rgb(0, 0, 0);">&nbsp;search_terms&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;$('search_input').getValue();</span></div>
<span style="font-family: Comic Sans MS;"><span style="font-size: 10pt;">
<p>
注意并非只有美钞函数能自动扩展元素！document.getElementsByClassName、Form.getElements、双美钞
$$()函数（CSS选择器）返回元素的时候，还有其他一些场合都要调用Element.extend()
&#8230;&#8230;总之，你根本很少有机会需要显式地调用Element.extend()。</p>
<p>　　本地原生扩展</p>
<p>　　在这一切背后有一个秘密。</p>
<p>　　在支持向本地原生对象（诸如HTML元素）的原型添加方法的浏览器中，无需调用过Element.extend()、美钞函数或别的什么东西，所有元素的DOM扩展就是默认可用的！于是在这些浏览器中，这样的代码是有效的： </p>
<div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; background-color: rgb(238, 238, 238); font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: rgb(0, 0, 255);">var</span><span style="color: rgb(0, 0, 0);">&nbsp;my_div&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;document.createElement('div');<br />
my_div.addClassName('pending').hide();<br />
document.body.appendChild(my_div);</span></div>
<p><br />
</p>
<p><span style="font-family: Comic Sans MS;"><span style="font-size: 10pt;">　　</span></span>因为浏览器本地原生对象的原型被扩展了，所有的DOM元素就内建具有了原型扩展方法。但是，这在IE里是行不通的，IE不让人改动
HTMLElement.prototype。为了让前面的例子在IE上也能行得通，你需要用 Element.extend()
扩展元素。毋需担心，这个方法足够机灵，不会重复扩展元素。</p>
<p>　　由于有不支持这个的浏览器的缘故，你必须注意只在元素已经被扩展了的情况下
使用DOM扩展。举例来说，上面的例子在 Firefox 和 Opera
里行得通，但是在创建元素之后加上Element.extend(my_div)可以使得脚本稳定可靠。你可以用美钞函数作为快捷的写法，如下例： </p>
</span></span>
<div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; background-color: rgb(238, 238, 238); font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);">&nbsp;这在&nbsp;IE&nbsp;里会出错：</span><span style="color: rgb(0, 128, 0);"><br />
</span><span style="color: rgb(0, 0, 0);">$('someElement').parentNode.hide()<br />
</span><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);">&nbsp;跨浏览器的方式：</span><span style="color: rgb(0, 128, 0);"><br />
</span><span style="color: rgb(0, 0, 0);">$($('someElement').parentNode).hide()</span></div>
<span style="font-family: Comic Sans MS;"><span style="font-size: 10pt;">
<p><br />
</p>
<p>　　记住了！永远要在所有（你打算支持的）浏览器里进行测试。</p>
<p>&nbsp;</p>
<br />
<p>　　英文 http://www.prototypejs.org/api</p>
<p>　　中文 http://www.ajaxgo.org/prototype/</p>
<p>　　Prototype Copyright &#169; 2006 Sam Stephenson<br />
</p>
<br />
<br />
</span></span>
<img src ="http://www.blogjava.net/Juizes361/aggbug/298440.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Juizes361/" target="_blank">残叶舞风</a> 2009-10-15 19:30 <a href="http://www.blogjava.net/Juizes361/articles/298440.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>