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 ...
随机推荐
- jsp创建cookie
<jsp:include flush="true" page="header.jsp" /> <script type="text/ ...
- 10046 trace详解(1)
10046 trace帮助我们解析一条/多条SQL.PL/SQL语句的运行状态,这些状态包括:Parse/Fetch/Execute三个阶段中遇到的等待事件.消耗的物理和逻辑读.CPU时间.执行计划等 ...
- java多线程总结(一)
在java中要想实现多线程,有两种手段,一种是继续Thread类,另外一种是实现Runable接口. 对于直接继承Thread的类来说,代码大致框架是: 1 2 3 4 5 6 7 8 9 10 11 ...
- Python高阶函数-闭包
高阶函数除了可以接受函数作为参数外,还可以把函数作为结果值返回. 在这里我们首先回忆一下python代码运行的时候遇到函数是怎么做的. 从python解释器开始执行之后,就在内存中开辟了一个空间 每当 ...
- day4 字符串的使用方法
一.字符串切片 索引和切片 [起始位置:结束位置:步长] s1 = 'python全栈8期' # 索引从0开始[索引(下标,index)] print(s1[0]) print(s1[3]) prin ...
- pycharm断点调试
step over 执行下一步 蓝色高亮的那一行表示准备执行的代码
- 转:Oracle中的日期和字符串互相转换
TO_DATE格式(以时间:2007-11-02 13:45:25为例) Year: yy two digits 两位年 显 ...
- 102. Binary Tree Level Order Traversal ------层序遍历
Given a binary tree, return the level order traversal of its nodes' values. (ie, from left to righ ...
- iOS 和服务端交互 数据加密策略
总体逻辑: 客户端:对称加密数据,上传...回执对称解密 同理服务端:获取上传数据 对称解密 ...下发:对称加密 当且仅当登录接口和 拉新(更新nonce 和 key的接口)是对称加密上传 非对称解 ...
- Hadoop:相关概念
Hadoop:相关概念 一.Hadoop简介 Hadoop实现了一个分布式文件系统(Hadoop Distributed File System),简称HDFS. 1.特点 (1)HDFS有高容错性的 ...