首先讲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来完成,这个过程有几个要求:

  1. 你的对象必须继承Jastor对象;
  2. 你的对象的属性名必须和json字符串的属性名称对应;
  3. 如果你的对象中包含自定义对象的列表,则需要为这个属性单独写一个类方法,规则是"属性名_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字符串的更多相关文章

  1. Java技巧——将前端的对象数组通过Json字符串传到后端并转换为对象集合

    Java技巧——将前端的对象数组通过Json字符串传到后端并转换为对象集合 摘要:本文主要记录了如何将将前端的对象数组通过Json字符串传到后端,并在后端将Json字符串转换为对象集合. 前端代码 前 ...

  2. 使用DataContractJsonSerializer类将类型实例序列化为JSON字符串和反序列化为实例对象 分类: JSON 前端 2014-11-10 10:20 97人阅读 评论(1) 收藏

    一.JSON简介 JSON(JavaScript Object Notation,JavaScript对象表示法)是一种轻量级的数据交换格式. JSON是"名值对"的集合.结构由大 ...

  3. 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  ...

  4. Java 对象,数组 与 JSON 字符串 相互转化

    当 Java 对象中包含 数组集合对象时,将 JSON 字符串转成此对象. public class Cart{} public class MemberCoupon{} public class C ...

  5. 如何向java后台的对象中传数组

    1.后台对象的参数需要是是list对象 /* * copyright : GLOBALROAM Ptd Ltd * VmCreateInfo.java * Author: * zhangpengyan ...

  6. JAVA将Object对象转byte数组

    /** * 将Object对象转byte数组 * @param obj byte数组的object对象 * @return */ public static byte[] toByteArray(Ob ...

  7. Json对象,Json数组,Json字符串的区别

    Json对象: var str = {"姓名":"张三","性别":"男","年龄":"2 ...

  8. java 如何对由json对象构成的数组形式的字符串进行遍历?

      1.情景展示 现在已知字符串为: [{"name":"微微笑","img":"http://zos.alipayobjects ...

  9. 【java】JSON.toJSONString 空对象也可以转化为JSON字符串

    <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifac ...

随机推荐

  1. Part01、memcache 缓存

    Python操作 RabbitMQ.Redis.Memcache.SQLAlchemy 目录 一. Memcached Memcached安装和基本使用 Python操作Memcached2.1 se ...

  2. Numpy中的时间类型

    从Numpy1.7开始,已经有了原生的日期-时间支持,基本类型称为datetime64. In [1]: import numpy as np In [2]: nd = np.datetime64(' ...

  3. day4 字符串的使用方法

    一.字符串切片 索引和切片 [起始位置:结束位置:步长] s1 = 'python全栈8期' # 索引从0开始[索引(下标,index)] print(s1[0]) print(s1[3]) prin ...

  4. python网络编程——IO多路复用select/poll/epoll的使用

    转载博客: http://www.haiyun.me/archives/1056.html http://www.cnblogs.com/coser/archive/2012/01/06/231521 ...

  5. linux命令(6/11)--修改文件的用户组chgrp和文件所有者chown

    在lunix系统里,文件或目录的权限的掌控以拥有者及所诉群组来管理.可以使用chgrp指令取变更文件与目录所属群组,这种方式采用群组名称或群组识别码都可以.Chgrp命令就是change group的 ...

  6. xaml可扩展应用程序标记语言

    xaml 类似于 html,但不是html,它是基于xml语言的:’html可以呈现在浏览器中而xaml 可以现实 3d动画等特效. xaml  是强类型语言,  是解释性语言,虽然他可以被编译.

  7. python中多重继承与获取对象

    1.python中多重继承 除了从一个父类继承外,Python允许从多个父类继承,称为多重继承. 多重继承的继承链就不是一棵树了,它像这样: class A(object): def __init__ ...

  8. SHA和MD5的Salt

    常用的对称加密算法有:DES.3DES.RC2.RC4.AES 常用的非对称加密算法有:RSA.DSA.ECC 使用单向散列函数的加密算法(摘要算法):MD5.SHA 那么什么是salt?生成一个随机 ...

  9. sublime text3 破解, 中文乱码支持, 设置

    1. 激活 菜单: Help -> Enter License, 弹出对话框输入激活码确认(Use License):如下图:. 激活码: ----- BEGIN LICENSE ----- A ...

  10. ==与equals的各种情况

    == 能用于基本类型之间.基本类型与引用类型之间及相同引用类型之间,不能用于不同引用类型之间 对于基本类型,取值来对比,对于引用类型,取地址来对比 int a= 1; Integer b= 1; Sy ...