详细阐述JSON 序列化的进行转换介绍
创始人
2024-06-19 22:52:15
0

将数据从一种格式转换成另一种格式总是一个很困难的任务。将 Atom 这样丰富和强大的数据格式序列化为 JSON 这类简单的基本格式,一定会面临许多问题,本文描述的技术只是其中的一种。

忽略所有扩展,而且不要将它们包含在 JSON 序列化中 序列化已知扩展,忽略其他所有扩展 序列化所有扩展 第一种选择显然是最简单的选择,但是限制了 JSON 表示的整体效用(并不一定是件坏事)。第二种选择允许对已知扩展的 JSON 序列化进行优化和简化。#t#

将 Atom 序列化为 JSON 需要考虑的最后一个问题是,如何处理扩展。有 3 种可能的选择:但是仍然限制了序列化的效用。第三种选择显著增加了序列化的总体复杂性,但是能够确保原始 Atom 文档的所有信息都能够通过 JSON 表示出来。

首先讨论如何优化已知扩展的输出。Atom Threading Extension (RFC 4685) 提供了一种方法,可以表示某个条目是另一个条目的响应。主题扩展规范明确指定了 in-reply-to 元素的属性和含义,并表示多个 in-reply-to 元素可以出现在同一个条目中。了解了这一点,就可以对 in-reply-to 元素的 JSON 表示进行优化,如清单 26 和 27 所示。

  1.   ...   ref="tag:example.org,2007:/foo/entries/2" />
  2.    ref="tag:example.org,2007:/foo/entries/3" />  ... 

文档转换

现在,可以获取任何 Atom 文档并将其转换为有用的JSON 序列化。清单 30 和 31 提供了转换过程的完整演示。原始 Atom 文档包含相对 IRI、语言上下文、扩展、多种文本和内容类型等。使用从 Internet 上获得的任何 XML 和 JSON 转换器运行此文档,产生的序列化都不可避免地遇到数据丢失和/或可用性问题。

  1.  version="1.0" encoding="utf-8" ?>  xmlns:a="http://www.w3.org/2005/Atom"    
  2.      xmlns:thr="http://purl.org/syndication/thread/1.0"      
  3.    xmlns="http://www.w3.org/1999/xhtml"      
  4.    xmlns:foo="http://example.org/unknown-markup"       
  5.   xml:lang="en-US"         xml:base="http://example.org/foo"     
  6.     dir="ltr">     tag:example.org,2007:/foo  
  7.  Example Feed    type="html">This is an example feed

    ]]>
     
  8.    type="xhtml">    
          

    Copyright © James M Snell

      
  9.   
      xmlns="http://www.w3.org/2005/Atom">    
  •  James M Snell     jasnell@example.org    
  •  /~jasnell      2007-10-14T12:12:12Z  
  •   rel="self" href="" />    href="/blog" />    rel="alternate" 
  • type="application/json" href="/blog;json" />      xml:base="entries/1">     
  • tag:example.org,2007:/foo/entries/1      type="text">Entry Number One  
  •     type="xhtml">       
             

    This is the first entry. You can read it  href="">here

      
  •      
  •            type="html">      

    Copyright © James M Snell

          
  •    2007-10-14T12:12:12Z      href="" />  
  •     rel="alternate" type="application/json" href="1;json" />   
  •    rel="replies" type="application/atom+xml"     
  •   href="1;replies" thr:count="10" />      type="xhtml">    
  •    
             

    This is the content of the first entry. It contains a picture.

         
  •      src="/images/foo.jpg" />       
  •        
  •     ref="tag:example.org,2007:/foo/entries/2" />     
  •  scheme="http://example.org/categories/" term="foo"      
  •  label="test" xml:lang="en-US" />      scheme="http://example.org/categories/" term="bar"  
  •      label="essai" xml:lang="fr" />      d="e">f  
  •       xml:base="entries/2" xml:lang="fr">     tag:example.org,2007:/foo/entries/2   
  •    type="text">La première entrée      type="xhtml">       
           
  •   

    Il s''agit de la première entrée. Vous pouvez lire          href="">est ici

         
  •   
  •            type="html">      

    Copyright © James M Snell

      
  •        2007-10-14T12:12:11Z      href="" />   
  •    rel="alternate" type="application/json" href="2;json" />      rel="replies" type="application/atom+xml"     
  •   href="2;replies" thr:count="10" />      type="xhtml">       
          
  •    

    Ceci est le contenu de la première entrée. Il contient une image.

          
  •     src="/images/foo.jpg" />       
  •          
  •  scheme="http://example.org/categories/" term="foo"  
  •      label="test" xml:lang="en-US" />      scheme="http://example.org/categories/" term="bar" 
  •       label="essai" xml:lang="fr" />      d="e">f     
  • 本文描述的从 Atom 到 JSON 的序列化技术能够生成一个容易理解、易于使用而且能够避免丢失重要上下文数据的 JSON 表示。清单 31. 对清单 30 中完整的 Atom 提要文档进行 JSON 序列化

    使用 Abdera JSON Writer

    本文介绍的技术已经作为 Apache Abdera 项目的一部分实现了。清单 32 中的代码演示了 Abdera JSON Writer 的使用。如果想要尝试 Atom 到 JSON 的转换,请访问 Abdera wiki,获取关于如何下载最新开发映像的信息。

    结束语

    将数据从一种格式转换成另一种格式总是一个很困难的任务。将 Atom 这样丰富和强大的数据格式序列化为 JSON 这类简单的基本格式,一定会面临许多问题。尽管已经有许多出色的尝试,在出现标准的转换方法之前,应用程序开发人员需要处理多种质量参差不齐的不兼容序列化方法,本文描述的技术只是其中的一种。

    相关内容

    热门资讯

    如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
    如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
    施耐德电气数据中心整体解决方案... 近日,全球能效管理专家施耐德电气正式启动大型体验活动“能效中国行——2012卡车巡展”,作为该活动的...
    Windows恶意软件20年“... 在Windows的早期年代,病毒游走于系统之间,偶尔删除文件(但被删除的文件几乎都是可恢复的),并弹...
    20个非常棒的扁平设计免费资源 Apple设备的平面图标PSD免费平板UI 平板UI套件24平图标Freen平板UI套件PSD径向平...
    德国电信门户网站可实时显示全球... 德国电信周三推出一个门户网站,直观地实时提供其安装在全球各地的传感器网络检测到的网络攻击状况。该网站...
    着眼MAC地址,解救无法享受D... 在安装了DHCP服务器的局域网环境中,每一台工作站在上网之前,都要先从DHCP服务器那里享受到地址动...
    为啥国人偏爱 Mybatis,... 关于 SQL 和 ORM 的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行...