json的用法 SBJson的用法 IOS开发 iphone开发

json 的用法


json简介

JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。它基于JavaScript(Standard ECMA-262 3rd Edition - December 1999)的一个子集。 JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C, C++, C#, Java, JavaScript, Perl, Python等)。这些特性使JSON成为理想的数据交换语言。易于人阅读和编写,同时也易于机器解析和生成。


JSON建构有两种结构:

  1. “名称/值”对的集合(A collection of name/value pairs)。不同的语言中,它被理解为对象(object),记录(record),结构(struct),字典(dictionary),哈希表(hash table),有键列表(keyed list),或者关联数组 (associative array)。
  2.值的有序列表(An ordered list of values)。在大部分语言中,它被理解为数组(array)。


json的存储结构

{ "people": [

  { "firstName": "Brett", "lastName":"McLaughlin", "email": "aaaa" },
  { "firstName": "Jason", "lastName":"Hunter", "email": "bbbb"},
  { "firstName": "Elliotte", "lastName":"Harold", "email": "cccc" }
  ]

}简单以这种结构为例 json最外层是 第一种结构 也就是键值对的结构,在其中一个名称为people的键值对中,包含了第二种结构:也就是数组的结构

当然组合是任意的,

比如可以最外层是数组  包含的是一套键值对;或者最外层是数组,内层还是包含数组;或者只包含数组;只包含键值对,组合非常灵活


json的代码的编写

在编码开头,你需要import json.h 头文件

json的存储(在这里以最外层为数组 数组中嵌套“字典”为例,别的大家都可以照葫芦画瓢)

NSMutableArray *jsonArray = [NSMutableArray alloc]init];//创建最外层的数组

NSMutableDictionary *dic = [[NSMutableDictionary alloc]init];//创建内层的字典

[dic setValue:recordIdStr1 forKey:@"recordID"];

[dic setValue:recordtimeStr forKey:@"recordClock"]; 

[dic setValue:t2 forKey:@"recordTime"];

[dic setValue:userNameStr forKey:@"userName"];

[jsonArray addObject:dic];//把创建好的字典加入数组中 当然你可以往一个数组中加好多词典,我这里只加了一个 需要多个的一个for循环即可

[self saveJsonArray:jsonArray withPathString:recordMsgPath];//我自己编写了一个函数 用来用json的形式存储这个数组

/************************************

 函数功能:以json的形式把一个NSArray的数组

 保存到指定文件中

 ************************************/

-(BOOL) saveJsonArray:(NSArray *)jsonValue withPathString:(NSString *)recordMsgPath

{

SBJSON *jsonParser = [[SBJSONalloc]init];

NSString *jsonString = [jsonParser stringWithObject:jsonValue];

NSData *dataToFile = [jsonString dataUsingEncoding:NSUTF8StringEncoding];

NSFileManager *fm = [NSFileManager defaultManager];

[fm removeItemAtPath:recordMsgPath error:nil];

if (![fm createFileAtPath:recordMsgPath contents:data ToFileattributes:nil]) {

NSFileHandle *outFile;

outFile = [NSFileHandle fileHandleForWritingAtPath:recordMsgPath];

if (outFile ==nil) {

}

[outFile writeData:dataToFile];

}

[jsonParser release];

return YES;

}


json的读取(还是以上面的存储结构为例)

NSData *filedata = [[NSData alloc]initWithContentsOfFile:recordMsgPath];

NSString *jsonstring1 = [[NSString alloc]initWithData:filedataencoding:NSUTF8StringEncoding];

NSMutableArray* recordWholeArray = [jsonstring1 JSONValue]; //获取文件解析成的json结构(因为在这里我的最外层是个数组所以我直接用NSMutableArray* 的形式来获取我需要的解析出来的json数组,如果你的最外层是字典那么你只需要把它改为NSMutableDictionary* 的类型 或者你就干脆用id类型 关键是要清楚自己想要干什么

//如果我想从数组第i行 取出“字典”中键值为"recordID"的字段:

NSMutableDictionary *jsonDic = [recordWholeArray objectAtIndex:i];

NSString *tempRecordIdStr =[jsonDic objectForKey:@"recordID"];

NSInteger tempRecordId = tempRecordIdStr.integerValue;




你可能感兴趣的:(ios,编程,json,iPhone,action)