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

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

    例子如下:

    JSON字符串的结构如下图:

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

    对应的数据结构如下:

    BMclass.h:

    1
    2
    3
    4
    5
    6
    @interface BMClass : Jastor
    @property (strong,nonatomicNSString* name;
    @property (strong,nonatomicNSString* grade;
    @property (strong,nonatomicNSArray* 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,nonatomicNSString* name;
    @property (strong,nonatomicNSString* sex;
    @property (nonatomicint 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();

    文章结束。

  • 相关阅读:
    第03组 Alpha冲刺(2/4)
    第03组 Alpha冲刺
    第09组 Beta版本演示
    第09组 Beta冲刺(4/4)
    第09组 Beta冲刺(3/4)
    第09组 Beta冲刺(2/4)
    第09组 Beta冲刺(1/4)
    第09组 Alpha事后诸葛亮
    第09组 Alpha冲刺(4/4)
    第09组 Alpha冲刺(3/4)
  • 原文地址:https://www.cnblogs.com/Sucri/p/4636384.html
Copyright © 2020-2023  润新知