首先講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:
@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();
文章結束。