Json, xml 和 plist

本文谨献给编程入门的朋友

Json, xml 和 plist三者都是结构化存储和交换信息的语法,平时多用于数据的本地化存储、策略配置和网络数据传输。结构化语法的统一特征是都由键值对(key-value)和数组构成,键值对可以映射为编程语言(Java、C#、Objective-C、PHP等)中的字典、Map、Hash表等结构,数组可以映射为编程语言中的数组、List等结构。

(1)Json(JavaScript Object Notation)

Json是一种JavaScript对象的表示方法,它的优势是表示相同内容会比XML语言更省空间,表述更加清晰,Json遵从JavaScript的书写风格。

键值对语法:

{“name”:”Jack”,”age”:24}

数组语法:

[“item0”,“item1”,”item2”,”item3”]

键值对数组组合:

{ “students”: [ { “id”: 235, “name”: “Jack”}, { “id”:236,”name”:”Tommy” } ] }

(2)XML(可扩展标记语言)

    XML是最广泛应用的标记语言,它后来衍生出很多扩展,如HTML、plist、XAML、SOAP等,不仅可以用来储存传输数据,也可以用来标记UI层,如android的View层就是用XML来描述的。

键值对语法:

<key1>value1</key1>

<key2>value2</key2>

数组:

<name>Jack</name>

<name>Tommy</name>

属性(attribute):

<student id:256 age:23>Jack</student>

键值对数组属性组合:

<Dept>    

   <DeptItem name="ComDept">第一制造部</DeptItem>

   <DeptItem name="ComDept">第二制造部</DeptItem>

   <DeptItem name="ComDept">第三制造部</DeptItem>

</Dept>

(3)plist (property List)

plist是NextSTEP(Apple)推出的一种存储格式,广泛应用于Mac OS,iOS等苹果的软件框架中。它的形式与XML类似,是一种基于XML扩展出来的标记语言,但是语法有很多独特之处。在plist的值标签中有5种类型:String、Number、Boolean、Date、Data

键值对:

<dict>

    <key>name</key>

    <string>Jack</string>

    <key>isStudent</key>

    <false/>

</dict>

数组:

<array>

     <string>item0</string>

     <string>item1</string>

     <string>item2</string>

</array>

键值对数组组合:

<dict>

     <key>name</key>

     <string>Lina</string>

     <key>boyFriends<key> 

     <array>

          <dict>

               <key>name</key>

               <string>Jay</string>

               <key>age</key>

               <number>24<number>

          </dict>

          <dict>

               <key>name</key>

               <string>Max</string>

               <key>age</key>

               <number>21<number>

          </dict>

     </array>

</dict>

将编程中的对象转化为此类语法或由其构成的文件的过程成为序列化,相反的过程称为反序列化。例如:

public class Rabbit 

{

 

     Rabbit()

     {

          this.earList = new List<Ear>(){ “left ear”, “right ear” };

          this.legList = new List<Leg>(){ “left leg”, “right leg” };

          this.body = “rabbit body”;

          this.head = “rabbit head”;

     }

 

      public List<string> earList { get; set;}

      public List<string> legList { get; set;}

      public string body { get; set;}

      public string head { get; set;}

}

反序列化为如下三种结构化语法为:

 

(1)Json:

Rabbit:

{

      “ears”: [ “left ear”, ”right ear” ],

      “legs”:  [“left leg”, “right leg”],

      “body”: ”rabbit body”,

      “head”: “rabbit head”

}

(2)XML

<Rabbit>

     <ears>

         <ear>left ear</ear>

         <ear>right ear</ear>

     <ears>

     <legs>

          <leg>left leg</leg>

          <leg>right leg</leg>

     </legs>

     <body>rabbit body</body>

     <head>rabbit head</head>

</Rabbit>

(3)Plist

<dict>

    <key>Rabbit</key>

    <dict>

         <key>ears</key>

         <array>

              <string>left ear</string>

              <string>right ear</string>

         </array>

         <key>legs</key>

         <array>

               <string>left leg<string>

               <string>right leg<string>

         </array>

        <key>body</key>

        <string>rabbit body</string>

        <key>head</key>

        <string>rabbit head</string>

    </dict>

</dict>

posted @   倾剑飞血  阅读(472)  评论(0编辑  收藏  举报
编辑推荐:
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
点击右上角即可分享
微信分享提示