objective-c和java下解析对象类型和数组类型JSON字符串
首先讲objective-c如何实现:
这里需要用到2个插件,一个是JSONKit,另一个是Jastor,一共包含6个文件,3个.h头文件和3个.m实现文件。在ARC的工程中如何导入不支持ARC的第三方工具请看这篇文章:iOS在支持arc的工程中,导入不支持arc的第三方的插件
具体文件在网上都比较好找,自己去下载即可。
NSObject类型的json字符串转换为对象
大体的思路是这样,首先将json字符串先转化成NSDictionary,然后再通过参数是NSDictionary的初始化方法来生成相应的对象。
其中生成NSDictionary的过程是由JSONKit提供的NSString的objectFromJSONString方法来完成的。
而将NSDictionary生成相应对象的过程是有Jastor来完成,这个过程有几个要求:
- 你的对象必须继承Jastor对象;
- 你的对象的属性名必须和json字符串的属性名称对应;
- 如果你的对象中包含自定义对象的列表,则需要为这个属性单独写一个类方法,规则是"属性名_class";
例子如下:
JSON字符串的结构如下图:
其中包含一个班级的信息,和班级中的3个学生的信息。
对应的数据结构如下:
BMclass.h:
@interface BMClass : Jastor
@property (strong,nonatomic) NSString* name;
@property (strong,nonatomic) NSString* grade;
@property (strong,nonatomic) NSArray* students;
+(id)students_class;
@end
BMclass.m:
@implementation BMClass
@synthesize name,grade,students; +(id)students_class{
return [BMStudent class];
}
@end
BMStudent.h:
@interface BMStudent : Jastor
@property (strong,nonatomic) NSString* name;
@property (strong,nonatomic) NSString* sex;
@property (nonatomic) int age;
@end
BMStudent.m:
@implementation BMStudent
@synthesize name,age,sex;
@end
具体的解析代码如下:
NSDictionary* dic = [jsonStr objectFromJSONString];
BMClass* c = [[BMClass alloc]initWithDictionary:dic];
运行后的解析的结果如下图(Debug的截图):
NSArray类型的json字符串转换为对象
如果您获得的字符串不是"{}"类型的,而是"[]"类型的,那么以上的解析方式不适用,需要将
NSDictionary* dic = [jsonStr objectFromJSONString];
修改为
NSArray* array = [jsonStr objectFromJSONString];
这时获得的数组是JKDictionary类型,如下;

要想将array中的对象转换成自己的对象,需要再遍历一边数组,使用
BMClass* c = [[BMClass alloc]initWithDictionary:dic];
为每个对象进行转换即可。
=================================这是分割线=========================================
现在讲java如何实现:
java下需要用到一个gson.jar包。
java下解析json利用gson比iOS下略简单,思路是获取到要解析的对象的Type,然后利用GSON提供的fromJson方法解析就好了。
沿用上边iOS的json字符串举例:
BMClass.class代码如下:
public class BMClass {
public String name;
public String grade;
public List<BMStudent> students;
}
BMStudent.class代码如下:
public class BMStudent {
public String name;
public String sex;
public int age;
}
Object类型的json字符串转换为对象
解析的过程代码如下:
Gson gson = new Gson();
Type classType = new TypeToken<BMClass>() {}.getType();
BMClass c = gson.fromJson(jsonStr, classType);
解析的结果如下(Debug截图):

List类型的json字符串转换为对象
解析的地方只更换Type的类型即可,例如:
Type classType = new TypeToken<List<BMClass>>() {}.getType();
文章结束。
objective-c和java下解析对象类型和数组类型JSON字符串的更多相关文章
- Java技巧——将前端的对象数组通过Json字符串传到后端并转换为对象集合
Java技巧——将前端的对象数组通过Json字符串传到后端并转换为对象集合 摘要:本文主要记录了如何将将前端的对象数组通过Json字符串传到后端,并在后端将Json字符串转换为对象集合. 前端代码 前 ...
- 使用DataContractJsonSerializer类将类型实例序列化为JSON字符串和反序列化为实例对象 分类: JSON 前端 2014-11-10 10:20 97人阅读 评论(1) 收藏
一.JSON简介 JSON(JavaScript Object Notation,JavaScript对象表示法)是一种轻量级的数据交换格式. JSON是"名值对"的集合.结构由大 ...
- json-lib-2.4-jdk15.jar所需全部JAR包.rar java jsoup解析开彩网api接口json数据实例
json-lib-2.4-jdk15.jar所需全部JAR包.rar java jsoup解析开彩网api接口json数据实例 json-lib-2.4-jdk15.jar所需全部JAR包.rar ...
- Java 对象,数组 与 JSON 字符串 相互转化
当 Java 对象中包含 数组集合对象时,将 JSON 字符串转成此对象. public class Cart{} public class MemberCoupon{} public class C ...
- 如何向java后台的对象中传数组
1.后台对象的参数需要是是list对象 /* * copyright : GLOBALROAM Ptd Ltd * VmCreateInfo.java * Author: * zhangpengyan ...
- JAVA将Object对象转byte数组
/** * 将Object对象转byte数组 * @param obj byte数组的object对象 * @return */ public static byte[] toByteArray(Ob ...
- Json对象,Json数组,Json字符串的区别
Json对象: var str = {"姓名":"张三","性别":"男","年龄":"2 ...
- java 如何对由json对象构成的数组形式的字符串进行遍历?
1.情景展示 现在已知字符串为: [{"name":"微微笑","img":"http://zos.alipayobjects ...
- 【java】JSON.toJSONString 空对象也可以转化为JSON字符串
<dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifac ...
随机推荐
- linux安装tree命令
安装 yum install -y tree 使用,比如显示/root的2层树结构 tree -L 2 /root 效果 /root ├── \033 ├── code │ └── hellowo ...
- [StringUtil ] isEmpty VS isBlank
昨天才意识到这两个的存在. Blank(空字符串 blank) StringUtils.isNoneBlank(null) = false StringUtils.isNoneBlank(null, ...
- Appium做Android功能自动化测试
前言 做Android端功能自动化已有2年多的时间了,使用过的功能自动化框架有Robotium.Uiautomator.Appium.最近研究自动化case复用的方案,调研了Appium的自动化框架, ...
- 安卓ios app自动化测试用例模板
import io.appium.java_client.android.AndroidDriver; import io.appium.java_client.android.AndroidElem ...
- LeetCode:下一个更大元素I【31】
LeetCode:下一个更大元素I[31] 题目描述 给定两个没有重复元素的数组 nums1 和 nums2 ,其中nums1 是 nums2 的子集.找到 nums1 中每个元素在 nums2 中的 ...
- 初学hadoop的个人历程
在学习hadoop之前,我就明确了要致力于大数据行业,成为优秀的大数据研发工程师的目标,有了大目标之后要分几步走,然后每一步不断细分,采用大事化小的方法去学习hadoop.下面开始叙述我是如何初 ...
- 修改AdminLTE左侧菜单展开延迟
AdminLTE左侧菜单展开会有半秒钟的延迟. 看起来会慢半拍. 可修改 admin/dist/js/app.min.js中的 animationSpeed值(默认为500) 如下:
- nginx日志分割总结
nginx日志自己不会进行分个,所有日志都会累积的记录在 access.log,error.log 中,当请求量大,一天就能到几百兆,如果不进行分给,对日志的查看和写入性能都有影响. 1. 编写脚本n ...
- 函数:生成1-n的随机数组,
方法很笨,不过可行: #include <stdio.h> /** 功能:获取一个1-n的随机数数组,这些随机数都互不相同 ** 入参:n-表示最大随机数: *randArray -用于储 ...
- OpenVpn部署使用easy-rsa-3.0
OpenVpn简介 OpenVPN是一个用于创建虚拟专用网络(Virtual Private Network加密通道的免费开源软件.使用OpenVPN可以方便地在家庭.办公场所.住宿酒店等不同网络访问 ...