標籤:
首先講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:
123456 |
@interface BMClass : Jastor @property (strong, nonatomic ) NSString * name; @property (strong, nonatomic ) NSString * grade; @property (strong, nonatomic ) NSArray * students; +( id )students_class; @end |
BMclass.m:
1234567 |
@implementation BMClass @synthesize name,grade,students; +( id )students_class{ return [BMStudent class ]; } @end |
BMStudent.h:
12345 |
@interface BMStudent : Jastor @property (strong, nonatomic ) NSString * name; @property (strong, nonatomic ) NSString * sex; @property ( nonatomic ) int age; @end |
BMStudent.m:
123 |
@implementation BMStudent @synthesize name,age,sex; @end |
具體的解析代碼如下:
12 |
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代碼如下:
12345 |
public class BMClass { public String name; public String grade; public List<BMStudent> students; } |
BMStudent.class代碼如下:
12345 |
public class BMStudent { public String name; public String sex; public int age; } |
Object類型的json字串轉換為對象
解析的過程代碼如下:
123 |
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(); |
文章結束。
objective-c和java下解析物件類型和數群組類型JSON字串