iOS网络编程之JSON简单介绍

来源:互联网 发布:js indexof undefined 编辑:程序博客网 时间:2024/05/17 22:24

JSON简单介绍

一种轻量级的数据交换格式。它基于ECMAScript的一个子集

JSON 语法规则

  • JSON 语法是 JavaScript 对象表示语法的子集。

    • 数据在键值对中
    • 数据由逗号分隔
    • 花括号保存对象
    • 方括号保存数组

JSON 名称/值对

JSON 数据的书写格式是:名称/值对。

名称/值对组合中的名称写在前面(在双引号中),值对写在后面(同样在双引号中),中间用冒号隔开:
"firstName":"John",
这很容易理解,等价于这条 Objective-C 语句:
[dic setValue:@"John" forKey:@"firstName"];

JSON 值

JSON 值可以是:

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

基础结构

JSON 结构有两种结构: 对象和数组

json简单说就是Objective-C中的字典和数组,所以这两种结构就是字典和数组两种结构,通过这两种结构可以表示各种复杂的结构

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

经过对象、数组2种结构就可以组合成复杂的数据结构了。

JSON格式


{
“name”: “中国”,
“province”: [{
“name”: “黑龙江”,
“cities”: {
“city”: [“哈尔滨”, “大庆”]
}
}, {
“name”: “广东”,
“cities”: {
“city”: [“广州”, “深圳”, “珠海”]
}
}, {
“name”: “台湾”,
“cities”: {
“city”: [“台北”, “高雄”]
}
}, {
“name”: “新疆”,
“cities”: {
“city”: [“乌鲁木齐”]
}
}]
}

代码解析

    //获取文件路径    NSString * path=[[NSBundle mainBundle] pathForResource:@"test.json" ofType:nil];    //将文件转换为数据    NSData * data=[NSData dataWithContentsOfFile:path];    //将数据序列化为字典    NSDictionary * dic=[NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableLeaves//返回的JSON对象中字符串的值为NSMutableString,目前在iOS 7上测试不好用,应该是个bug,可简单理解为返回对象不可变                                                         error:nil];//    NSJSONReadingMutableContainers  返回可变容器,NSMutableDictionary或NSMutableArray//    NSJSONReadingAllowFragments:允许JSON字符串最外层既不是NSArray也不是NSDictionary,但必须是有效的JSON Fragment。例如使用这个选项可以解析 @“123” 这样的字符串。(这个方法不常用)    //接收字典中的值并打印    NSString * name=dic[@"name"];    NSLog(@"name==%@",name);    NSArray * province=dic[@"province"];    [province enumerateObjectsUsingBlock:^(id  _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {        NSDictionary * dic=obj;        NSString * name=dic[@"name"];        NSDictionary * cities=dic[@"cities"];        NSArray * city=cities[@"city"];        NSLog(@"\n");        [city enumerateObjectsUsingBlock:^(id  _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {            NSLog(@"name==%@,city[%ld]==%@",name,idx,obj);        }];    }];
0 0
原创粉丝点击