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:
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下需要用到一个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;
}
|
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
objective-c和java下解析对象类型和数组类型JSON字符串相关推荐
- java jsoup解析开彩网api接口json数据实例
https://www.cnblogs.com/zdz8207/p/7288830.html 开彩网apiJava技术学习 https://www.itkc8.com json-lib-2.4-jdk ...
- Android --- 怎么把其他类型的数据转换成 Json 字符串
文章目录 一.其他类型的数据转换成 Json 字符串(原生方法) 二.使用 Google 的 Gson 库将各种类型的数据转换成 Json 字符串 一.其他类型的数据转换成 Json 字符串(原生方法 ...
- ts定义数组类型_TS的对象类型、数组类型、函数类型
对象类型 基础使用 在 TypeScript 中,我们使用接口(Interfaces)来定义对象的类型. 简单例子: interface Person { name: string; age: num ...
- mysql json类型存储list_list存储json字符串
简介 ES是一个基于RESTful web接口并且构建在Apache Lucene之上的开源分布式搜索引擎. 同时ES还是一个分布式文档数据库,其中每个字段均可被索引,而且每个字段的数据均可被搜索,能 ...
- 如何将C#对象转换为.NET中的JSON字符串?
我有这样的课程: class MyDate {int year, month, day; }class Lad {string firstName;string lastName;MyDate dat ...
- Python 自定义对象数组 转JSON 字符串
前言 在Python中基本数据类型可以直接使用json.dumps直接转json字符串,但是对于自定义的类来说,需要先将对象"字典化",也就是使用__dict__这个函数:同理对于 ...
- Python 对象数组 转JSON 字符串
前言 在Python中基本数据类型可以直接使用json.dumps直接转json字符串,但是对于自定义的类来说,需要先将对象"字典化",也就是使用__dict__这个函数:同理对于 ...
- JAVA下OLE对象使用
在一个视图中包含一个Active X控件需要两个对象的支持,即一个OleFrame和一个OleClientSite对象.如果需要创建一个OLE应用,需要先后创建他们.创建OleFrame对象比较简单, ...
- java 如何对由json对象构成的数组形式的字符串进行遍历?
1.情景展示 现在已知字符串为: [{"name":"微微笑","img":"http://zos.alipayobjects.c ...
- 在将对象数组转换为json字符串
private List<WHCombineBatchFragmentBarcodeEnterEvent.Message.Data> dataList = new ArrayList< ...
最新文章
- Xamarin XAML语言教程构建进度条ProgressBar
- 与小熊、新宝不同的北鼎,仍不是小家电的出路
- flash player for linux 64位,linux 64位系统下安装flash player插件
- SOT-143封装 ESD二极管
- 把mac地址转换为标准mac地址
- HTML5系列:HTML5与HTML4的区别
- mysql cookbook 1
- [转]快速清除SQL Server日志的两种方法
- Java EE 7发布–反馈和新闻报道
- html中怎么自动获得搜索文本框的光标焦点
- Windows 创建符号链接
- 音乐播放器的设计与实现
- 基于JAVA+SpringMVC+MYSQL的酒店客房管理系统
- react 脚手架 立即可以写业务 react + react-router-dom + less + axios + antd
- 敏捷外包工程系列之四:合理选择质量管理的等级(一)
- PS学习笔记6-选区工具
- AMD不要靠近卡巴斯基,会变得不幸(卡巴斯基导致的蓝屏问题)
- vue移动端UI组件
- CF364D Ghd(随机化)
- 工作中少说这“五句话”(必读)