如何在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 结构,你可以直接使用 NSArrayNSDictionary 进行转换)

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

在 Objective-C 中获取 NSData 的 CRC 校验和

如何将 NSData 参数传递给在 swift 3 中调用的目标 c 方法?

如何在 Objective-C 中对 NSData 进行按位异或?

Objective - C to Swift : NSData with NSJSONSerialisation

在Objective C(可可)中将十六进制数据字符串转换为NSData