iOS开源项目:JSONKit
一个Json解析库,其特点是代码简单,只有一个.h和.m文件。
https://github.com/johnezang/JSONKit
JSON(JavaScript Object Notation)是一个轻量级的,基于文本的,序列结构化数据格式. 由RFC 4627定义.提供以下主要类型:
null
Boolean true and false
Number
String
Array
Object (a.k.a. Associative Arrays, Key / Value Hash Tables, Maps, Dictionaries, etc.)
对应的Objective—C的类:
JSON | Objective-C |
---|---|
null |
NSNull |
true and false |
NSNumber |
Number | NSNumber |
String | NSString |
Array | NSArray |
Object | NSDictionary
|
1、使用:
NSString *jsonstring =@"[{\"age\":18,\"book\":{\"price\":23.2,\"title\":\"boook111\"},\"name\":\"samyou\"},{\"age\":22,\"book\":{\"price\":33,\"title\":\"booook222\"},\"name\":\"samsam\"}]"; NSData *data=[jsonstring dataUsingEncoding:NSUTF8StringEncoding]; NSArray *arr=(NSArray *)[data mutableObjectFromJSONData]; NSLog(@"count=%d",arr.count); for(int i=;i<arr.count;i++) { NSDictionary *people=[arr objectAtIndex:i]; NSString *name=[people objectForKey:@"name"]; NSString *age=[people objectForKey:@"age"]; NSLog(@"person withname=%@,age=%d",name,[age intValue]); NSDictionary *book=[people objectForKey:@"book"]; NSString *bookname=[book objectForKey:@"title"]; NSNumber *price=[book objectForKey:@"price"]; NSLog(@"book with title=%@,price=%f",bookname,[price doubleValue]); }
使用上很简单,利用字典键值对获取就行,参考http://stephen830.iteye.com/blog/1718550。
2、原理:
JSONKit的源码只有个两个文件,先看看解析JSON的流程。
NSArray *arr=(NSArray *)[data mutableObjectFromJSONData];
这个方法是NSData的Category,里面调用了
JSONDecoder的解析方法:
[JSONDecoder decoderWithParseOptions:parseOptionFlags]) mutableObjectWithData:self error:error];
总的来说,JSONKit对
NSArray
NSString
NSData
NSDictionary
都进行了序列化和反序列化的扩展,可以把这些对象与JSON对象之间相互转换。
由于JSONKit没有使用ARC,所以使用时不要忘了在build phases -》compile sources 选择文件后面加-fno-objc-arc参数。
iOS开源项目:JSONKit的更多相关文章
- GitHub 上值得关注的 iOS 开源项目
GitHub 上值得关注的 iOS 开源项目 原文链接:http://www.jianshu.com/p/e5dfe1a09611 GitHub 上值得关注的 iOS 开源项目 —— 由 红旗下的蛋 ...
- iOS开源项目周报0105
由OpenDigg 出品的iOS开源项目周报第四期来啦.我们的iOS开源周报集合了OpenDigg一周来新收录的优质的iOS开发方面的开源项目,方便iOS开发人员便捷的找到自己需要的项目工具等. He ...
- iOS开源项目周报1229
由OpenDigg 出品的iOS开源项目周报第三期来啦.我们的iOS开源周报集合了OpenDigg一周来新收录的优质的iOS开发方面的开源项目,方便iOS开发人员便捷的找到自己需要的项目工具等. Ma ...
- iOS开源项目周报1222
由OpenDigg 出品的iOS开源项目周报第二期来啦.我们的iOS开源周报集合了OpenDigg一周来新收录的优质的iOS开发方面的开源项目,方便iOS开发人员便捷的找到自己需要的项目工具等. io ...
- iOS开源项目周报1215
由OpenDigg 出品的iOS开源项目周报第一期来啦.我们的iOS开源周报集合了OpenDigg一周来新收录的优质的iOS开发方面的开源项目,方便iOS开发人员便捷的找到自己需要的项目工具等. PY ...
- 直接拿来用!最火的iOS开源项目
1. AFNetworking 在众多iOS开源项目中,AFNetworking可以称得上是最受开发者欢迎的库项目.AFNetworking是一个轻量级的iOS.Mac OS X网络通信类库,现在是G ...
- (转)直接拿来用!最火的iOS开源项目(二)
“每一次的改变总意味着新的开始.”这句话用在iOS上可谓是再合适不过的了.GitHub上的iOS开源项目数不胜数,iOS每一次的改变,总会引发iOS开源项目的演变,从iOS 1.x到如今的iOS 7, ...
- (转)直接拿来用!最火的iOS开源项目(一)
1. AFNetworking 在众多iOS开源项目中,AFNetworking可以称得上是最受开发者欢迎的库项目.AFNetworking是一个轻量级的iOS.Mac OS X网络通信类库,现在是G ...
- 40个GitHub上最受欢迎的iOS开源项目
40个GitHub上最受欢迎的iOS开源项目(一) http://www.weste.net/2013/8-1/92975.html 40个GitHub上最受欢迎的iOS开源项目(二) http:// ...
- 【转】GitHub平台最火的iOS开源项目——2013-08-25 17
http://www.cnblogs.com/lhming/category/391396.html 今天,我们将介绍20个在GitHub上非常受开发者欢迎的iOS开源项目,你准备好了吗? 1. AF ...
随机推荐
- 【LOJ】 #2521. 「FJOI2018」领导集团问题
题解 这道题很显然可以想出来一个\(n^2\)的dp,也就是dp[u][i]表示以u为根的子树最大值是i的点集最大是多少(i是离散化后的值) 就是对于每个儿子处理出后缀最大值然后按位相加更新父亲,我们 ...
- Java I/O学习
转载: Java I/O学习 一.Java I/O类结构以及流的基本概念 在阅读Java I/O的实例之前我们必须清楚一些概念,我们先看看Java I/O的类结构图: Java I/O主要以流的形式进 ...
- SQL Server 执行计划分析
当一个查询到达数据库引擎时,SQL Server执行两个主要的步骤来产生期望的查询结果: 第一步:查询编译,生成查询计划. 第二步:执行这个查询计划. 1. 用于演示分析执行计划的查询语句 /* 查询 ...
- thinkphp5.0 多层MVC
ThinkPHP基于MVC(Model-View-Controller,模型-视图-控制器)模式,并且均支持多层(multi-Layer)设计. 模型(Model)层 默认的模型层由Model类构成, ...
- 转:linux关闭防火墙iptables
ref:https://jingyan.baidu.com/article/066074d64f433ec3c21cb000.html Linux系统下面自带了防火墙iptables,iptables ...
- 隐藏当前Activity而不关闭
startActivity后调用 overridePendingTransition(R.anim.zoomin, R.anim.zoomout); 可以实现Activity跳转的动画效果 打开act ...
- vue v-model 简单使用
最近在写组件时,考虑到子组件的状态需要实时反馈给父组件,于是想起来了v-model,下面介绍一下自定义组件中的简单使用 官网介绍不是很清晰,这个默认的input事件很容易让人产生误解,其实个人建议还是 ...
- Java导出数据生成Excel表格
事先准备: 工具类: package com.wazn.learn.util.export; import java.sql.Connection; import java.sql.DriverMan ...
- 【欧拉回路】UVA - 10054 The Necklace
题目大意: 一个环被切割成了n个小块,每个小块有头尾两个关键字,表示颜色. 目标是判断给出的n个小块能否重构成环,能则输出一种可行解(按重构次序输出n个色块的头尾颜色).反之输出“some beads ...
- python的进阶--爬虫小试
代理之说 [ python实现代理服务功能实例 ] -- https://www.jb51.net/article/43266.htm [检测代理是否有效] -- https://blog.csd ...