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)。
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;