我试图用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
为空。
答案 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)
}