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:

@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();

文章結束。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM