博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
objective-c和java下解析对象类型和数组类型JSON字符串
阅读量:5093 次
发布时间:2019-06-13

本文共 2357 字,大约阅读时间需要 7 分钟。

首先讲objective-c如何实现:

这里需要用到2个,一个是JSONKit,另一个是Jastor,一共包含6个文件,3个.h头文件和3个.m实现文件。在ARC的工程中如何导入不支持ARC的第三方工具请看这篇文章:

具体文件在网上都比较好找,自己去下载即可。

NSObject类型的json字符串转换为对象

大体的思路是这样,首先将json字符串先转化成NSDictionary,然后再通过参数是NSDictionary的初始化方法来生成相应的对象。

其中生成NSDictionary的过程是由JSONKit提供的NSString的objectFromJSONString方法来完成的。

而将NSDictionary生成相应对象的过程是有Jastor来完成,这个过程有几个要求:

  1. 你的对象必须继承Jastor对象;
  2. 你的对象的属性名必须和json字符串的属性名称对应;
  3. 如果你的对象中包含自定义对象的列表,则需要为这个属性单独写一个类方法,规则是"属性名_class";

例子如下:

JSON字符串的结构如下图:

其中包含一个班级的信息,和班级中的3个学生的信息。

对应的数据结构如下:

BMclass.h:

1
2
3
4
5
6
@interface 
BMClass : Jastor
@property 
(strong,
nonatomic
NSString
* name;
@property 
(strong,
nonatomic
NSString
* grade;
@property 
(strong,
nonatomic
NSArray
* students;
+(
id
)students_class;
@end

BMclass.m:

1
2
3
4
5
6
7
@implementation 
BMClass
@synthesize 
name,grade,students;
 
+(
id
)students_class{
    
return 
[BMStudent 
class
];
}
@end

BMStudent.h:

1
2
3
4
5
@interface 
BMStudent : Jastor
@property 
(strong,
nonatomic
NSString
* name;
@property 
(strong,
nonatomic
NSString
* sex;
@property 
(
nonatomic
int 
age;
@end

BMStudent.m:

1
2
3
@implementation 
BMStudent
@synthesize 
name,age,sex;
@end

具体的解析代码如下:

1
2
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下需要用到一个包。

java下解析json利用gson比iOS下略简单,思路是获取到要解析的对象的Type,然后利用GSON提供的fromJson方法解析就好了。

沿用上边iOS的json字符串举例:

BMClass.class代码如下:

1
2
3
4
5
public 
class 
BMClass {
    
public 
String name;
    
public 
String grade;
    
public 
List<BMStudent> students;
}

BMStudent.class代码如下:

1
2
3
4
5
public 
class 
BMStudent {
    
public 
String name;
    
public 
String sex;
    
public 
int 
age;
}

Object类型的json字符串转换为对象

解析的过程代码如下:

1
2
3
Gson gson = 
new 
Gson();
Type classType = 
new 
TypeToken<BMClass>() {}.getType();
BMClass c = gson.fromJson(jsonStr, classType);

解析的结果如下(Debug截图):

 

List类型的json字符串转换为对象

解析的地方只更换Type的类型即可,例如:

1
Type classType = 
new 
TypeToken<List<BMClass>>() {}.getType();

文章结束。

 

转载于:https://www.cnblogs.com/Sucri/p/4636384.html

你可能感兴趣的文章
WCF中NetTCp配置
查看>>
Java自学之路(新手一定要看)
查看>>
数据库--MyBatis的(insert,update,delete)三种批量操作
查看>>
Python与Go插入排序
查看>>
冒泡排序
查看>>
sql server 2016新特性 查询存储(Query Store)的性能影响
查看>>
Dell T3610 台式工作站UEFI模式安装Win7系统
查看>>
NumPy 将停止支持 Python 2
查看>>
树莓派(raspberry pi)学习11: 将树莓派变成一个Web服务器(转)
查看>>
mysql-关联查询
查看>>
减少.NET应用程序内存占用的一则实践
查看>>
Java 数据结构之双链表
查看>>
[转]基于WorldWind平台的建筑信息模型在GIS中的应用
查看>>
php类的实现
查看>>
C/C++怎样传递二维数组,转载自CSDN
查看>>
12通过作用域链实现闭包
查看>>
beeline hiveserver2 start
查看>>
springMVC使用HandlerMethodArgumentResolver 自定义解析器实现请求参数绑定方法参数
查看>>
初始js闭包&事件的冒泡和捕获&EVENT对象
查看>>
Django Web开发【2】Django入门
查看>>