首先讲objective-c如何实现:
这里需要用到2个插件,一个是JSONKit,另一个是Jastor,一共包含6个文件,3个.h头文件和3个.m实现文件。在ARC的工程中如何导入不支持ARC的第三方工具请看这篇文章:iOS在支持arc的工程中,导入不支持arc的第三方的插件
具体文件在网上都比较好找,自己去下载即可。
大体的思路是这样,首先将json字符串先转化成NSDictionary,然后再通过参数是NSDictionary的初始化方法来生成相应的对象。
其中生成NSDictionary的过程是由JSONKit提供的NSString的objectFromJSONString方法来完成的。
而将NSDictionary生成相应对象的过程是有Jastor来完成,这个过程有几个要求:
- 你的对象必须继承Jastor对象;
- 你的对象的属性名必须和json字符串的属性名称对应;
- 如果你的对象中包含自定义对象的列表,则需要为这个属性单独写一个类方法,规则是"属性名_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的截图):
=================================这是分割线=========================================
现在讲java如何实现:
java下需要用到一个gson.jar包。
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;
} |
解析的过程代码如下:
1
2
3
|
Gson gson = new
Gson();
Type classType = new
TypeToken<BMClass>() {}.getType();
BMClass c = gson.fromJson(jsonStr, classType); |
解析的结果如下(Debug截图):
文章结束。