将NSMutableArray转换为JSONArray

时间:2016-05-30 13:09:49

标签: ios objective-c

我试图用nsmutable数组创建一个json数组。

为此,我尝试将nsmutable数组转换为nsdata,如下所示,

 NSData *dataArray = [NSKeyedArchiver archivedDataWithRootObject:self.countryNameArray];

self.countryNameArray是一个包含国家/地区名称的可变数组。

然后我试图用NSData创建一个json数组,如下所示

NSString* jsonArray = [[NSString alloc] initWithBytes:[dataArray bytes] length:[dataArray length] encoding:NSUTF8StringEncoding];

但问题是,当我试图使用它时,jsonArray为空。

3 个答案:

答案 0 :(得分:3)

NSData *jsonData = [NSJSONSerialization dataWithJSONObject:arr options:NSJSONWritingPrettyPrinted error:&error];
NSString *jsonString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];

答案 1 :(得分:2)

你正在混淆NSKeyedArchiver和JSON。

archivedDataWithRootObject:以未指定的格式生成NSArray。您不知道格式是什么,除了您可以稍后使用匹配的调用从该数据重新创建NSArray。

然后假设NSData包含UTF-8格式的字符串。绝对没有理由为什么会这样。并且完全没有理由为什么创建NSString会给你一个NSArray!

查看NSJSONSerializer的文档。从文档中可以明显看出如何从数组或字典创建JSON对象。和NSKeyedArchiver完全没有任何关系。

答案 2 :(得分:1)

Swift 3

do {
    let data = try JSONSerialization.data(withJSONObject: YOUR VARIABLE HERE)
    let dataString = String(data: data, encoding: .utf8)!
    print(dataString)
} catch {
    print("JSON serialization failed: ", error)
}