如何将JSON字符串转为iOS端=赋值格式属性列表字符串存入CoreData
问题解答
1. 目标格式的官方名称
你给出的第一份序列化格式的官方名称是 OpenStep 格式属性列表(Property List,常简称 plist),是苹果生态下三种标准 plist 存储格式的其中一种(另外两种为二进制 plist、XML 格式 plist),也是早期 Objective-C 代码里常用的对象明文序列化格式。
2. 转换实现逻辑
要实现 JSON 到目标格式的转换,只需要把 JSON 先解析为 Foundation 集合对象,再通过系统提供的属性列表序列化工具指定格式输出即可,步骤如下:
- 首先将输入的 JSON 字符串反序列化为 Array 或 Dictionary 类型的 Foundation 集合对象
- 调用
PropertyListSerialization序列化集合对象,明确指定格式为openStep - 将序列化生成的 Data 转换为字符串,即可直接存入 CoreData 兼容原有逻辑
3. Swift 可用代码示例
import Foundation func convertJSONToOpenStepPlist(jsonString: String) -> String? { // 解析JSON为Foundation集合对象 guard let jsonData = jsonString.data(using: .utf8), let jsonObject = try? JSONSerialization.jsonObject(with: jsonData) else { return nil } // 序列化为OpenStep格式plist数据 guard let plistData = try? PropertyListSerialization.data( fromPropertyList: jsonObject, format: .openStep, options: 0 ) else { return nil } // 转换为字符串返回 return String(data: plistData, encoding: .utf8) } // 调用测试 let inputJSON = #"[{"name":"Apple","value":"fruit-1"},{"name":"Banana","value":"fruit-2"}]"# if let targetFormatStr = convertJSONToOpenStepPlist(jsonString: inputJSON) { print(targetFormatStr) // 输出完全符合你要求的存储格式 }
4. 兼容说明
- 生成的字符串完全兼容原有
NSString.propertyList()读取逻辑,不需要修改老模块代码 - 不要使用
JSONSerialization直接输出字符串,必须经过属性列表序列化步骤才能得到目标格式
内容的提问来源于stack exchange,提问作者Glenn Posadas
相关产品推荐
相关产品推荐

