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是一种轻量级的数据交换格式 从结构上看,所有的数据(data)最终都可以分解成三种类型: 第一种类型是标量(scalar),也就是一个单独的字符串(string)或数字 (numbers),...
  • coyote1994
  • coyote1994
  • 2015年11月18日 19:45
  • 662

JSON.parse()方法

本文章介绍一下javascript in json 中 json2.js中的parse()方法。 以下为json2js中的原文介绍 JSON.parse(text, reviver)      ...
  • LowKeySk
  • LowKeySk
  • 2012年11月12日 17:29
  • 165048

JSON语法及解析,序列化

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

Android中json的解析优化

在安卓网络app开发中,由于服务器和客户端使用json字段串通信,但是android自带的json解析类不够强大,比如要实现一个users(装user的list)解析,json串如下, {"stat...
  • huweigoodboy
  • huweigoodboy
  • 2014年05月05日 17:06
  • 1042

JSON.parse()和JSON.stringify()

parse用于从一个字符串中解析出json对象,如 var str = '{"name":"huangxiaojian","age":"23"}' 结果: JSON.parse(str) ...
  • wangxiaohu__
  • wangxiaohu__
  • 2012年02月13日 13:33
  • 659755

JSON是什么 JSON怎么用

JSON是什么 JSON怎么用? ==================================================================================...
  • wishfly
  • wishfly
  • 2011年11月22日 18:03
  • 43661

IOS-分析JSON、XML的区别?JSON、XML解析方式的底层是如何处理的?

区别: 1)可读性方面:基本相同,xml的可读性比较好 2)可扩展性方面:都具有很好的扩展性 3)编码难度方面:相对而言:JSON的编码比较容易 4)解码难度:json解码难度基本为零,xml...
  • Maxdong24
  • Maxdong24
  • 2015年02月14日 09:09
  • 1512

JSON解析之手动解析

1、JSON简介 1)概念: JSON的全称是JavaScript Object Notation,是一种轻量级的数据交换格式。 2)特点: (1)本质就是具有特定格式的字符串 (2)JSO...
  • qq_24675479
  • qq_24675479
  • 2017年09月16日 15:15
  • 340

原生Json数据的解析

前言: Json数据解析在获取接口数据是经常需要用到的,现在因为这一需求, 市面上也有不少jar可以帮助我们快速的解析Json数据, 比如:谷歌的Gson,阿里巴巴的Fa...
  • ToastIt
  • ToastIt
  • 2017年04月15日 12:15
  • 829

JSON的三种处理方式

在Java平台(StAX, JAXB等)XML处理质量和多样化的激励下,Jackson为多功能的Java JSON处理包其目标为集快捷、正确、轻量和符合人体工程学与一体。 本文将给出Jack...
  • pengguojun117
  • pengguojun117
  • 2013年12月15日 22:43
  • 15414
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:JSON 语法 及 解析
举报原因:
原因补充:

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