JSON 语法 及 解析

原创 2015年11月18日 19:45:48

JSON

是一种轻量级的数据交换格式

从结构上看,所有的数据(data)最终都可以分解成三种类型:

  1. 第一种类型是标量(scalar),也就是一个单独的字符串(string)或数字 (numbers),比如”北京”这个单独的词
  2. 第二种类型是序列(sequence),也就是若干个相关的数据按照一定顺序并列在一 起,又叫做数组(array)或列表(List),比如”北京,上海”
  3. 第三种类型是映射(mapping),也就是一个名/值对(Name/value),即数据有一个 名称,还有一个与之相对应的值,这又称作散列(hash)或字典(dictionary),比 如”首都:北京”

Douglas Crockford发明了JSON,Json的规定非常简单:

  1. 并列的数据之间用逗号”, “分隔
  2. 映射用冒号”: “表示
  3. 并列数据的集合(数组)用方括号”[]”表示
  4. 映射的集合(对象)用大括号”{}”表示

JSON模式举例

[

 {
 "precision": "zip",
 "Latitude":  37.7668,
 "Longitude": -122.3959,
 "Address":   "",
 "City":      "SAN FRANCISCO",
 "State":     "CA",
 "Zip":       "94107",
 "Country":   "US"
 },
 {
 "precision": "zip",
 "Latitude":  37.371991,
 "Longitude": -122.026020,
 "Address":   "",
 "City":      "SUNNYVALE",
 "State":     "CA",
 "Zip":       "94085",
 "Country":   "US"
 }
 ]

英文官方文档:http://www.ietf.org
中文注解网址:http://www.json.org/json-zh.htm
用来检测是否为JSON格式:http://www.sojson.com

NSJSONSerialization

//把数据转换成JSON模型,options参数一般为 NSJSONReadingAllowFragments
+ (id)JSONObjectWithData:(NSData *)dataerror:(NSError **)error
options:(NSJSONReadingOptions)opt
error:(NSError **)error
//把JSON模型转换成数据
+ (NSData *)dataWithJSONObject:(id)obj
options:(NSJSONWritingOptions)opt

JSONKit(第三方的,不如上边的系统的好使)

在github上直接搜索jsonkit,然后下载到本地,打开后拷贝.h和.m文件到工程中,点击运行,会报出很多错误,因为jsonkit是在非arc环境下编写的,所以还要进行设置,让编译的时候对jsonkit不使用arc

这里写图片描述

序列化: NSArray NSDictionary NSString
对上边的对象发送下面的消息,会转化成对应格式的JSONData

JSONData
– JSONDataWithOptions:includeQuotes:error:
-
JSONDataWithOptions:serializeUnsupportedClassesUsingDelegate:selector:error:
- JSONDataWithOptions:serializeUnsupportedClassesUsingBlock:error:
– JSONString
– JSONStringWithOptions:includeQuotes:error:
-
JSONStringWithOptions:serializeUnsupportedClassesUsingDelegate:selector:error:
– JSONStringWithOptions:serializeUnsupportedClassesUsingBlock:error:

反序列化: NSData NSString
对上边的对象发送下面的消息,会转化成对应的 NSArray NSDictionary NSString

– objectFromJSONData
– objectFromJSONDataWithParseOptions:
– objectFromJSONDataWithParseOptions:error:
– mutableObjectFromJSONData
– mutableObjectFromJSONDataWithParseOptions:
– mutableObjectFromJSONDataWithParseOptions:error:
– objectFromJSONString
– objectFromJSONStringWithParseOptions:
– objectFromJSONStringWithParseOptions:error:
– mutableObjectFromJSONString
– mutableObjectFromJSONStringWithParseOptions:
– mutableObjectFromJSONStringWithParseOptions:error:


网页源代码中</table>包裹起来的代表表格,</tr>包裹起来的代表表格中的一行

代码举例

#import "ViewController.h"
#import "JSONKit.h"
@interface ViewController ()
@property (weak, nonatomic) IBOutlet UITextField *cityName;

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];

    //下载和上传json数据主要用到一个类,NSJSONSerialization,进行数据转换,任务-NSURLSession类,分下载-NSURLSessionDataTask 和上传-NSURLSessionUploadTask
    //1.下载的举例:
    NSDictionary *dict = @{@"zhengzhou":@"101180101"};

    NSURL *url = [NSURL URLWithString:[NSString stringWithFormat:@"http://www.weather.com.cn/adat/cityinfo/%@.html",dict[_cityName.text]]];
    //创建一个任务对象
    NSURLSession *session = [NSURLSession sharedSession];
    //创建下载任务
    NSURLSessionDataTask *dataTask = [session dataTaskWithURL:url completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        if (error) {
            NSLog(@"error >> %@",error);
            return ;
        }
        //把数据转化成json对象
        id obj = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers | NSJSONReadingMutableLeaves | NSJSONReadingAllowFragments error:&error];
        //打印对象中的数据
        NSLog(@"obj >> %@",obj);
        NSLog(@"cityname >> %@",obj[@"weatherinfo"][@"city"]);
        NSLog(@"cityname >> %@",obj[@"weatherinfo"][@"cityid"]);

    }];
    //启动下载任务
    [dataTask resume];

    //2.上传的举例:
    //假设我们的数据是:
    NSArray *array = @[@"poppei",@30,@"410000"];
    NSError *error1;
    //把基本类型的对象转换成json的数据格式
    NSData *data1 = [NSJSONSerialization dataWithJSONObject:array options:NSJSONWritingPrettyPrinted error:&error1];
    //创建一个任务对象
    NSURLSession *session1 = [NSURLSession sharedSession];
    //上传任务(这里用nil,只是举例,应该是有一个具体的值)
    NSURLSessionUploadTask *uploadTask = [session1 uploadTaskWithRequest:nil fromData:data1];

    NSString *dataStr = [[NSString alloc]initWithData:data1 encoding:NSUTF8StringEncoding];
    NSLog(@"datastr >> %@",dataStr);
    //启动上传任务
    [uploadTask resume];
}

#pragma mark - 利用JSONKit

- (IBAction)searchWeather:(UIButton *)sender {

    NSDictionary *dict = @{@"zhengzhou":@"101180101"};
    NSURL *url = [NSURL URLWithString:[NSString stringWithFormat:@"http://www.weather.com.cn/adat/cityinfo/%@.html",dict[_cityName.text]]];
    //创建一个任务对象
    NSURLSession *session = [NSURLSession sharedSession];
    //创建下载任务
    NSURLSessionDataTask *dataTask = [session dataTaskWithURL:url completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        if (error) {
            NSLog(@"error >> %@",error);
            return ;
        }
        //使用jsonkit把json数据转化成对象
        id obj = [data objectFromJSONData];//此处用到JSONKit中的方法
        //打印对象中的数据
        NSLog(@"obj >> %@",obj);
        NSLog(@"cityname >> %@",obj[@"weatherinfo"][@"city"]);
        NSLog(@"cityname >> %@",obj[@"weatherinfo"][@"cityid"]);
    }];
    [dataTask resume];

}
版权声明:本文为博主原创文章,未经博主允许不得转载。

超详细JSON解析步骤

JSON简介 JAVAScript Object Notation是一种轻量级的数据交换格式具有良好的可读和便于快速编写的特性。业内主流技术为其提供了完整的解决方案(有点类似于正则表达式 ,获得...

IOS中Json解析的四种方法

作为一种轻量级的数据交换格式,json正在逐步取代xml,成为网络数据的通用格式。 有的json代码格式比较混乱,可以使用此“http://www.bejson.com/”网站来进行JSON格式化校...
  • enuola
  • enuola
  • 2012年08月24日 14:00
  • 300374

为了访问外网,我也是拼了

事情的起因是最近在学习spark,这种刚刚出现的新技术的资料在国内自是不多,于是就想到了翻墙出去。     一开始使用的是GoAgent翻墙,奈何速度实在是不佳,于是一气之下买了VPN服务,后来...

.net写的Email可以群发邮件

//引入 using System.Net.Mail; //在这里我们在page_load时就发邮件 protected void Page_Load(object sender, EventA...
  • hfsaini
  • hfsaini
  • 2011年08月10日 13:21
  • 361

JSON语法解析

JSON语法JSON三种类型值 简单值:使用与JavaScript相同的语法,可以在JSON中表示字符串、数值、布尔值和null。但JSON不支持JavaScript的特殊值undefined. 如J...
  • haandxc
  • haandxc
  • 2016年06月17日 16:55
  • 142

Json语法解析

JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。简单的说,它是一种数据格式,一般用于不同的服务器之间传递数据。比如,一个web服务器要给另一个服务器传递一...

JavaScript JSON——“语法、解析与序列化”的注意要点

语法 JSON可以表示一下三种类型的值: 简单值:使用与js相同的语法可以在json中表示字符串、数值、布尔值和null。但是json不支持js的undefined。 对象:...

JSON语法及解析,序列化

1.理解 JSON 语法。 2.解析 JSON 3.序列化J SON 虽然一直都知道有 JSON 这个东西,了解大概语法,但没有认认真真去了解过,本内容是 javascript 高级程序设计 第二章...

json语法解析器

前言最近正在补习编译原理的相关理论基础。于是琢磨着写个简单的语言解析器。0x00. 根基1. python编程(ply库) 2. 正则表达式 0x01. 了解json的语法规范1. json里的字典k...

提出一个Json解析语法规范

关于Json解析: 现在很多工具都提供了将实体类转化为Json字符串的功能,而且相当一部分都具备“用注解告诉你这个值不要解析到json中去”的能力。 然而,必须注意到,这种工作是在代码中敲死的,或...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:JSON 语法 及 解析
举报原因:
原因补充:

(最多只允许输入30个字)