如何将NSArray(字符串格式)转换为实际数组格式?

时间:2015-12-02 13:40:14

标签: ios objective-c json nsarray

当我解析一个JSON时,我在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-"}]

但是当试图访问" optionName"喜欢以下格式

[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.'

请帮我解决这个问题..

5 个答案:

答案 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];

答案 1 :(得分:0)

使用此方法

@api.multi
def scheduler(self):
    view_id = self.env.ref('ragtimeorder.view_week_form').id
#   context = self._context.copy()
    return {
            'name':_('SCHEDULE RATECARD'),
            'view_type': 'form',
            'view_mode': 'form',
            'views': [(view_id, 'form'), ],
            'res_model': 'week',
           # 'context': self._context,
            'type': 'ir.actions.act_window',
            'target': 'new',
            'flags': {'action_buttons': True},
}

并像这样打电话

myHashes = {}
users = ["user1", "user2", "user3"]
resources = ["resource1", "resource2", "resource3"]

users.each.with_index do |user, i|
        myHashes["#{user}@#{resources[i]}"] = {}

end

输出

选项名称----&gt; A +

答案 2 :(得分:0)

尝试使用下面的转换为数组

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

尝试使用以下代码将其转换为NSArray

{{1}}

答案 3 :(得分:0)

你有一个复杂的对象图。&#34;看起来你的外部对象是一个数组,里面有你的字典。

如果optionArray是NSArray,那么如果您尝试将其视为字典,它会准确地为您报告错误。

您的代码:

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

正在这样做(尽管您正在使用KVC,您应该直接使用数组和字典方法。)

您的代码应该是这样的:

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

答案 4 :(得分:0)

不使用像SBJson这样的第三方

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

实际上你将optionString作为json String获取,所以你必须解析它然后像这样使用

NSData *data = [optionString dataUsingEncoding:NSUTF8StringEncoding];

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

NSLog(@"%@",[optionArray valueForKey:@"optionName"]);