2015-12-02 91 views
-1

當我解析一個JSON我得到下面的結果我的NSArray裏現在如何將NSArray(以字符串格式)轉換爲真正的數組格式?

(
    { 
    category = Allergies; 
    group = Allergies; 
    name = "Food Allergies"; 
    option = ""; 
    subGroup = ""; 
    type = VARCHAR; 
}, 
    { 
    category = Allergies; 
    group = Allergies; 
    name = "Drug Allergies"; 
    option = ""; 
    subGroup = ""; 
    type = VARCHAR; 
}, 
    { 
    category = Allergies; 
    group = ""; 
    name = "Blood Group"; 
    option = "[{\"id\":1,\"isDefault\":false,\"additionalOption\":false,\"optionName\":\"A+\"},{\"id\":2,\"isDefault\":false,\"additionalOption\":false,\"optionName\":\"A-\"},{\"id\":3,\"isDefault\":false,\"additionalOption\":false,\"optionName\":\"B+\"},{\"id\":4,\"isDefault\":false,\"additionalOption\":false,\"optionName\":\"B-\"},{\"id\":5,\"isDefault\":false,\"additionalOption\":false,\"optionName\":\"O+\"},{\"id\":6,\"isDefault\":false,\"additionalOption\":false,\"optionName\":\"O-\"},{\"id\":7,\"isDefault\":false,\"additionalOption\":false,\"optionName\":\"AB+\"},{\"id\":8,\"isDefault\":false,\"additionalOption\":false,\"optionName\":\"AB-\"}]"; 
    subGroup = ""; 
    type = SINGLESELECT; 
} 
) 

當我試圖把值鍵「選項」
[array valueForKey:@"option"]objectAtIndex:indexPath.row];

我得到以下結果

[{"id":1,"isDefault":false,"additionalOption":false,"optionName":"A+"},{"id":2,"isDefault":false,"additionalOption":false,"optionName":"A-"},{"id":3,"isDefault":false,"additionalOption":false,"optionName":"B+"},{"id":4,"isDefault":false,"additionalOption":false,"optionName":"B-"},{"id":5,"isDefault":false,"additionalOption":false,"optionName":"O+"},{"id":6,"isDefault":false,"additionalOption":false,"optionName":"O-"},{"id":7,"isDefault":false,"additionalOption":false,"optionName":"AB+"},{"id":8,"isDefault":false,"additionalOption":false,"optionName":"AB-"}] 

但是當試圖訪問「選項名」像以下格式

[optionArray valueForKey:@「optionName」]; 然後我得到這個錯誤

*** Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[<__NSCFConstantString 0x10d8638a0> valueForUndefinedKey:]: this class is not key value coding-compliant for the key optionName.' 

請幫我解決這個問題..

+0

嘗試使用枚舉塊 –

回答

1

假設你正在使用的是iOS 5或更高版本,JSON序列化是建立在:

NSArray *json = [NSJSONSerialization 
     JSONObjectWithData:[string dataUsingEncoding:NSUTF8StringEncoding] 
     options:kNilOptions 
     error:&error]; 

此前IOS5,您可以使用SBJSON達到相同的:

NSArray *jsonObjects = [jsonParser objectWithString:string error:&error]; 
0

使用此方法

- (NSArray *)convertStringToDictionary:(NSString *)str{ 
    NSError *jsonError; 
    NSData *objectData = [str dataUsingEncoding:NSUTF8StringEncoding]; 
    NSArray *json = [NSJSONSerialization JSONObjectWithData:objectData            options:NSJSONReadingMutableContainers error:&jsonError]; 

    return json; 
} 

而且這樣調用

NSArray *arr = [self convertStringToDictionary:@"[{\"id\":1,\"isDefault\":false,\"additionalOption\":false,\"optionName\":\"A+\"},{\"id\":2,\"isDefault\":false,\"additionalOption\":false,\"optionName\":\"A-\"},{\"id\":3,\"isDefault\":false,\"additionalOption\":false,\"optionName\":\"B+\"},{\"id\":4,\"isDefault\":false,\"additionalOption\":false,\"optionName\":\"B-\"},{\"id\":5,\"isDefault\":false,\"additionalOption\":false,\"optionName\":\"O+\"},{\"id\":6,\"isDefault\":false,\"additionalOption\":false,\"optionName\":\"O-\"},{\"id\":7,\"isDefault\":false,\"additionalOption\":false,\"optionName\":\"AB+\"},{\"id\":8,\"isDefault\":false,\"additionalOption\":false,\"optionName\":\"AB-\"}]"]; 

NSLog(@"Option Name ----> %@",[[arr objectAtIndex:0] valueForKey:@"optionName"]); 

輸出

選項名稱----> A +

+0

爲什麼Swift? OP用[objective-c]標記了這個問題。 – Kreiri

+0

你可以讓它在objc pls – Bangalore

+0

@Kreiri轉換它在ObjC。 –

0

嘗試使用下面得轉換成數組

NSArray *tmpDayArray=[[NSArray alloc]init]; 
NSError *error; 
NSData *dictData = [NSJSONSerialization dataWithJSONObject:tmpDayArray options:NSJSONWritingPrettyPrinted error:&error]; 
NSString *open_days = [[NSString alloc] initWithData:dictData encoding:NSUTF8StringEncoding]; 

下面的代碼將它轉換爲NSArray

NSArray * array =[NSJSONSerialization JSONObjectWithData:[[NSString stringWithFormat:@"%@",@"YOUR STRING"] dataUsingEncoding:NSUTF8StringEncoding]options: NSJSONReadingMutableContainers error:nil]; 
0

你有一個複雜的「對象圖」。它看起來像你的外部對象是一個數組,裏面你有字典。

如果optionArray是一個NSArray那麼它會給你到底,如果你試圖把它當作一本字典要報告的錯誤。

您的代碼:

[array valueForKey:@"option"]objectAtIndex:indexPath.row]; 

就是幹這個(雖然你正在使用KVC,您應該直接使用數組和字典的方法。)

你的代碼看起來應該是這樣,而不是:

NSDictionary* aDict = array[indexPath.row]; 
NSString *optionString = aDict[@"option]; 
0

不使用任何第三方像SBJson

NSString *optionString = [[array valueForKey:@"option"]objectAtIndex:indexPath.row]; 

其實你正在optionString爲JSON字符串,所以你必須分析它然後像這樣使用

NSData *data = [optionString dataUsingEncoding:NSUTF8StringEncoding]; 

NSArray * optionArray = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil]; 

NSLog(@"%@",[optionArray valueForKey:@"optionName"]); 
相關問題