将NSString转换为NSDictionary/JSON

Guy*_*ood 79 xcode json objective-c nsdictionary nsstring

我将以下数据保存为NSString:

 {
    Key = ID;
    Value =         {
        Content = 268;
        Type = Text;
    };
},
    {
    Key = ContractTemplateId;
    Value =         {
        Content = 65;
        Type = Text;
    };
},
Run Code Online (Sandbox Code Playgroud)

我想将此数据转换为NSDictionary包含键值对的数据.

我首先尝试将其转换NSStringJSON对象,如下所示:

 NSData *data = [string dataUsingEncoding:NSUTF8StringEncoding];
id json = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil];
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试:

NSString * test = [json objectForKey:@"ID"];
NSLog(@"TEST IS %@", test);
Run Code Online (Sandbox Code Playgroud)

我收到的价值为NULL.

任何人都可以提出什么问题?

Jan*_*mal 251

我相信你误解了关键值的JSON格式.你应该将你的字符串存储为

NSString *jsonString = @"{\"ID\":{\"Content\":268,\"type\":\"text\"},\"ContractTemplateID\":{\"Content\":65,\"type\":\"text\"}}";
NSData *data = [jsonString dataUsingEncoding:NSUTF8StringEncoding];
id json = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil];
Run Code Online (Sandbox Code Playgroud)

现在,如果您执行以下NSLog语句

NSLog(@"%@",[json objectForKey:@"ID"]);
Run Code Online (Sandbox Code Playgroud)

结果将是另一个NSDictionary.

{
    Content = 268;
    type = text;
}
Run Code Online (Sandbox Code Playgroud)

希望这有助于获得清晰的理解.


Mob*_*Dev 14

我认为你从响应中获取数组,因此你必须为数组分配响应.

NSError *err = nil;
NSArray *array = [NSJSONSerialization JSONObjectWithData:[string dataUsingEncoding:NSUTF8StringEncoding] options:NSJSONReadingMutableContainers error:&err];
NSDictionary *dictionary = [array objectAtIndex:0];
NSString *test = [dictionary objectForKey:@"ID"];
NSLog(@"Test is %@",test);


Woo*_*ock 6

使用此代码,其中str是您的JSON字符串:

NSError *err = nil;
NSArray *arr = 
 [NSJSONSerialization JSONObjectWithData:[str dataUsingEncoding:NSUTF8StringEncoding] 
                                 options:NSJSONReadingMutableContainers 
                                   error:&err];
// access the dictionaries
NSMutableDictionary *dict = arr[0];
for (NSMutableDictionary *dictionary in arr) {
  // do something using dictionary
}
Run Code Online (Sandbox Code Playgroud)