如何在Objective C中使用NSData创建json对象?
Posted
技术标签:
【中文标题】如何在Objective C中使用NSData创建json对象?【英文标题】:How to create json Object with NSData in Objective C? 【发布时间】:2012-09-17 10:21:50 【问题描述】:如何在Objective C
中创建带有NSData
的json 对象。我在 NSData
变量中有值。
【问题讨论】:
您是想按原样发送 NSData 还是从中获取值,然后从中创建您的 JSON,然后发送 @VakulSaini:- 是的,我尝试并找到了一个函数 NSJSONSerialization。但是当我尝试将 NSData 插入其中时,我遇到了一个错误。你能帮我找到更好的解决方案吗。。 @VimalVenugopalan:- 我已经在一个名为 encryptedData 的变量中有数据,它的数据类型是 NSData。现在我想制作一个包含 encryptedData 值的 json 对象。你有什么建议吗.. 【参考方案1】:你可以在 ios 5 中这样使用它(如果你确定你的 json 结构,你可以直接使用 NSArray
或 NSDictionary
进行转换)
NSError *jsonError;
id jsonDictionaryOrArray = [NSJSONSerialization JSONObjectWithData:myData options:NULL error:&jsonError];
if(jsonError)
// check the error description
NSLog(@"json error : %@", [jsonError localizedDescription]);
else
// use the jsonDictionaryOrArray
【讨论】:
嗨 Moxy,我是 iPhone 开发的新手,有点困惑。你能告诉我做同样的代码吗.. 这行代码应该足够获取你的json对象了。你有什么不明白的?你已经知道你的 json 是如何格式化的了吗? 但是在打印 jsonDictionaryOrArray (NSLog(@"%@",jsonDictionaryOrArray);) 的值时,它显示为 nil。你知道为什么吗?? 我编辑了我的答案,以便您检查问题所在。【参考方案2】:如果你在 NSData 对象中有一个值,那么你可以像下面这样在 NSString 变量中转换它
NSString *response = [[NSString alloc] initWithData:receivedData
encoding:NSUTF8StringEncoding];
已编辑...
我不确定你想要什么,但我从字符串中给你 json 数组,如下所示..
NSString *responseString = [[NSString alloc] initWithData:responseData encoding:NSUTF8StringEncoding];
[responseData release];
NSError *error;
SBJSON *json = [[SBJSON new] autorelease];
NSArray *arrData = [json objectWithString:responseString error:&error];
[responseString release];
你可以获取数组中的数据
希望这对你有帮助...
:)
【讨论】:
是的,我尝试将 NSData 转换为 NSString。但它总是返回 nul。也害怕转换它,因为它可能会导致数据丢失。现在 NSData 变量保存 IV、SALT 和 CIPHERTEXT。我将这三个值连接到一个名为 encryptedData 的变量中。 (NSData *encryptedData;)。现在我想创建一个可以保存 encryptedData 的 json .. 有什么帮助吗??【参考方案3】:NSData *jsonData = [NSData dataWithContentsOfURL:[NSURL URLWithString:@"youur link"]];
id jsonObjects = [NSJSONSerialization JSONObjectWithData:jsonData options:NSJSONReadingMutableContainers error:nil];
if([jsonObjects isKindOfClass:[NSArray class]])
//Is array
else if([jsonObjects isKindOfClass:[NSDictionary class]])
//is dictionary
else
//is something else
为 SWIFT 编辑
do
if let jsonArray = try JSONSerialization.jsonObject(with: data, options : .allowFragments) as? [Dictionary<String,Any>]
else
print("bad json")
catch let error as NSError
print(error)
【讨论】:
以上是关于如何在Objective C中使用NSData创建json对象?的主要内容,如果未能解决你的问题,请参考以下文章
在 Objective-C 中获取 NSData 的 CRC 校验和
如何将 NSData 参数传递给在 swift 3 中调用的目标 c 方法?
如何在 Objective-C 中对 NSData 进行按位异或?