将 NSString 转换为 NSDictionary / JSON



我将以下数据保存为NSString

 {
    Key = ID;
    Value =         {
        Content = 268;
        Type = Text;
    };
},
    {
    Key = ContractTemplateId;
    Value =         {
        Content = 65;
        Type = Text;
    };
},

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

我首先尝试将NSString转换为 JSON 对象,如下所示:

 NSData *data = [string dataUsingEncoding:NSUTF8StringEncoding];
id json = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil];

但是当我尝试时:

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

我收到值为 NULL .

谁能建议问题出在哪里?

我相信您误解了键值的 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];

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

NSLog(@"%@",[json objectForKey:@"ID"]);

结果将是另一个 NSDictionary。

{
    Content = 268;
    type = text;
}

我认为您从响应中获取数组,因此您必须将响应分配给数组。

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);

使用以下代码,其中 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
}

Swift 3:

if let jsonString = styleDictionary as? String {
    let objectData = jsonString.data(using: String.Encoding.utf8)
    do {
        let json = try JSONSerialization.jsonObject(with: objectData!, options: JSONSerialization.ReadingOptions.mutableContainers) 
        print(String(describing: json)) 
    } catch {
        // Handle error
        print(error)
    }
}

使用以下代码从AFHTTPSessionManager失败块获取响应对象;然后可以将泛型类型转换为所需的数据类型:

id responseObject = [NSJSONSerialization JSONObjectWithData:(NSData *)error.userInfo[AFNetworkingOperationFailingURLResponseDataErrorKey] options:0 error:nil];

最新更新