詳述JavaScript 代碼顯示經(jīng)過(guò) JSON 序列化的文本
JavaScript 代碼 的數(shù)據(jù)輸入模型,在序列化日期時(shí),選擇非常有限。我可以:將日期轉(zhuǎn)換為日期的 JavaScript toString 序列(例如,2007 年 10 月 21 日 星期日 12:34:28 GMT-0700 (PDT)) 按日期在 Atom 文檔中的呈現(xiàn)形式對(duì)其進(jìn)行復(fù)制。
前兩個(gè)選項(xiàng)可以在 JavaScript 中處理,不需要開發(fā)人員做太多的工作。也就是說(shuō),要獲得正確的 JavaScript Date 對(duì)象,只需調(diào)用新的 Date(feed.updated)。但是,其缺點(diǎn)是,使用第一個(gè)選項(xiàng)會(huì)丟失與毫秒數(shù)和時(shí)區(qū)偏移有關(guān)的重要信息;
如果使用第二個(gè)選項(xiàng),日期的 toString 序列會(huì)因?qū)崿F(xiàn)和地區(qū)的不同而不同。盡管使用 RFC 3339 序列需要額外的工作,但這是避免數(shù)據(jù)丟失和數(shù)據(jù)含義不明的惟一選項(xiàng)。
文本結(jié)構(gòu)
Atom 支持大量的文本和內(nèi)容選項(xiàng),到目前為止,這是在 JSON 序列化過(guò)程中碰到的最復(fù)雜最困難的問題。文本結(jié)構(gòu),比如 title、subtitle、summary 和 rights 元素,可以包含純文本、轉(zhuǎn)義 HTML 或JavaScript 代碼;這些結(jié)構(gòu)具有語(yǔ)言敏感性,因此必須考慮 xml:lang 屬性;#t#
而且 HTML 和 XHTML 標(biāo)記可以包含需要解析的相對(duì) URI。由于 Atom content 元素支持 Base64 編碼的內(nèi)容、任意 XML 標(biāo)記和使用 src 屬性引用的外部?jī)?nèi)容,這使得序列化過(guò)程更加困難。
對(duì) Atom 內(nèi)容進(jìn)行 JSON 序列化的目的是找到一種通用的表示方法,該方法能夠盡可能一致地捕獲這些選項(xiàng)。清單 18 展示了一個(gè)帶有 3 種文本結(jié)構(gòu)的提要示例。
- <updated>2007-10-14T12:12:12Z</updated>
title 元素為純文本。它需要繼承提要的語(yǔ)言上下文,否則不具備描述性。subtitle 元素包含轉(zhuǎn)義的 HTML 標(biāo)記。right 元素也是純文本,但它覆蓋了語(yǔ)言上下文。清單 19 展示了這 3 個(gè)元素的JavaScript 代碼。
- <feed xmlns="http://www.w3.org/2005/Atom"> ...
- <title>Example Feed</title> <subtitle type="html"><p>This is an example feed</p></subtitle>
- <rights xml:lang="fr">...</right> ...</feed>
注意,這只是最簡(jiǎn)單的情形,title 被序列化為一個(gè)簡(jiǎn)單字符串。但是,由于 right 元素中的語(yǔ)言上下文時(shí)刻都會(huì)變化,所以盡管它是純文本,也被序列化為包含兩個(gè)字段(attributes 和 children)的對(duì)象。
對(duì)于 subtitle 元素,JavaScript 代碼標(biāo)記被解析并呈現(xiàn)為一種分層結(jié)構(gòu)。XHTML 標(biāo)記也使用相同的結(jié)構(gòu)(清單 20 和 21)。
- { "title":"Example Feed", "subtitle":{ "attributes":{ "type":"html" },
- "children":[ { "name":"p", "attributes":{ }, "children":["This is an
- example feed" ] } ] }, "rights":{ "attributes":{ "lang":"fr" },
- "children":[ "..." ] } }