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