我有保存为以下数据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
}
斯威夫特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];