86

我将以下数据保存为NSString

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

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

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

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

但是,当我尝试:

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

我收到的值为NULL

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

4

5 回答 5

263

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

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

于 2013-09-11T08:43:42.710 回答
14

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

NSError *err = nil;
NSArray *array = [NSJSONSerialization JSONObjectWithData:[string dataUsingEncoding:NSUTF8StringEncoding] 选项:NSJSONReadingMutableContainers 错误:&err];
NSDictionary *dictionary = [数组 objectAtIndex:0]; 
NSString *test = [字典 objectForKey:@"ID"];
NSLog(@"测试是 %@",test);
于 2013-09-11T08:43:13.533 回答
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
}
于 2013-09-11T08:32:54.843 回答
2

斯威夫特 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)
    }
}
于 2017-06-12T23:31:02.520 回答
0

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

id responseObject = [NSJSONSerialization JSONObjectWithData:(NSData *)error.userInfo[AFNetworkingOperationFailingURLResponseDataErrorKey] options:0 error:nil];
于 2017-04-05T11:07:40.107 回答