【问题标题】:How to create json Object with NSData in Objective C?如何在Objective C中使用NSData创建json对象?
【发布时间】:2012-09-17 10:21:50
【问题描述】:

如何在Objective C 中创建带有NSData 的json 对象。我在 NSData 变量中有值。

【问题讨论】:

  • 您是想按原样发送 NSData 还是从中获取值,然后从中创建您的 JSON,然后发送
  • @VakulSaini:- 是的,我尝试并找到了一个函数 NSJSONSerialization。但是当我尝试将 NSData 插入其中时,我遇到了一个错误。你能帮我找到更好的解决方案吗。。
  • @VimalVenugopalan:- 我已经在一个名为 encryptedData 的变量中有数据,它的数据类型是 NSData。现在我想制作一个包含 encryptedData 值的 json 对象。你有什么建议吗..

标签: iphone ios ios5 ios4


【解决方案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)
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-29
    相关资源
    最近更新 更多