iOS - JSON 数据解析

前言

    NS_CLASS_AVAILABLE(10_7, 5_0) @interface NSJSONSerialization : NSObject
    @available(iOS 5.0, *)         public class NSJSONSerialization : NSObject

1、JSON 数据

  • JSON(JavaScript Object Notation)是一种轻量级的数据交换格式。它基于 ECMAScript 的一个子集。JSON 采用完全独立于语言的文本格式,但是也使用了类似于 C 语言家族的习惯(包括 C、C++、 C#、Java、JavaScript、Perl、Python 等)。这些特性使 JSON 成为理想的数据交换语言。易于人阅读和编写,同时也易于机器解析和生成(一般用于提升网络传输速率)。

1.1 JSON 语法规则

  • JSON 语法是 JavaScript 对象表示语法的子集。
    • 数据在键值对中
    • 数据由逗号分隔
    • 花括号保存对象
    • 方括号保存数组

1.2 JSON 基础结构

  • JSON 结构有两种,JSON 简单说就是 javascript 中的对象和数组,所以这两种结构就是对象和数组两种结构,通过这两种结构可以表示各种复杂的结构。

    • 1、对象:对象在 JSON 中表示为 “{}” 括起来的内容,数据结构为 {key:value, key:value, ...} 的键值对的结构,在面向对象的语言中,key 为对象的属性,value 为对应的属性值,所以很容易理解,取值方法为 对象[key] 获取属性值,这个属性值的类型可以是数字、字符串、数组、对象几种。
    • 2、数组:数组在 JSON 中表示为 “[]” 括起来的内容,数据结构为 ["java", "javascript", "vb", ...],取值方式和所有语言中一样,使用索引获取。字段值的类型可以是 数字、字符串、数组、对象几种。

1.3 JSON 名称/值对

  • JSON 数据的书写格式是:名称/值对。
  • 名称/值对组合中的名称写在前面(在双引号中),值对写在后面(同样在双引号中),中间用冒号隔开:"firstName":"John"

1.4 JSON 值

  • JSON 值可以是:
    • 数字(整数或浮点数)
    • 字符串(在双引号中)
    • 逻辑值(true 或 false)
    • 数组(在方括号中)
    • 对象(在花括号中)
    • null

1.5 JSON 基础示例

  • 简单地说,JSON 可以将 JavaScript 对象中表示的一组数据转换为字符串,然后就可以在函数之间轻松地传递这个字符串,或者在异步应用程序中将字符串从 Web 客户机传递给服务器端程序。这个字符串看起来有点儿古怪,但是 JavaScript 很容易解释它,而且 JSON 可以表示比 "名称/值对" 更复杂的结构。例如,可以表示数组和复杂的对象,而不仅仅是键和值的简单列表。

  • 1、表示名称/值对:

    • 按照最简单的形式,可以用下面这样的 JSON 表示 "名称/值对":

      {"firstName":"Brett"}
    • 这个示例非常基本,而且实际上比等效的纯文本 "名称/值对" 占用更多的空间:

          firstName=Brett
    • 但是,当将多个 "名称/值对" 串在一起时,JSON 就会体现出它的价值了。首先,可以创建包含多个 "名称/值对" 的记录,比如:

          {"firstName":"Brett", "lastName":"McLaughlin", "email":"aaaa"}
    • 从语法方面来看,这与 "名称/值对" 相比并没有很大的优势,但是在这种情况下 JSON 更容易使用,而且可读性更好。例如,它明确地表示以上三个值都是同一记录的一部分;花括号使这些值有了某种联系。

  • 2、表示数组

    • 当需要表示一组值时,JSON 不但能够提高可读性,而且可以减少复杂性。例如,假设您希望表示一个人名列表。在 XML 中,需要许多开始标记和结束标记;如果使用典型的 "名称/值对"(就像在本系列前面文章中看到的那种名 "名称/值对"),那么必须建立一种专有的数据格式,或者将键名称修改为 person1-firstName 这样的形式。如果使用 JSON,就只需将多个带花括号的记录分组在一起:

          {
              "people":[
                      {"firstName":"Brett", "lastName":"McLaughlin", "email":"aaaa"},
                      {"firstName":"Jason", "lastName":"Hunter", "email":"bbbb"},
                      {"firstName":"Elliotte", "lastName":"Harold", "email":"cccc"}
                      ]
          }
    • 这不难理解。在这个示例中,只有一个名为 people 的变量,值是包含三个条目的数组,每个条目是一个人的记录,其中包含名、姓和电子邮件地址。上面的示例演示如何用括号将记录组合成一个值。当然,可以使用相同的语法表示多个值(每个值包含多个记录):

          {
              "programmers":[
                          {"firstName": "Brett", "lastName": "McLaughlin", "email": "aaaa"},
                          {"firstName": "Jason", "lastName": "Hunter", "email": "bbbb"},
                          {"firstName": "Elliotte", "lastName": "Harold", "email": "cccc"}
                          ],
      
              "authors":[
                      {"firstName": "Isaac", "lastName": "Asimov", "genre": "sciencefiction"},
                      {"firstName": "Tad", "lastName": "Williams", "genre": "fantasy"},
                      {"firstName": "Frank", "lastName": 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值