Ios 在userDefaults中保存json

Ios 在userDefaults中保存json,ios,json,serialization,swift3,nsuserdefaults,Ios,Json,Serialization,Swift3,Nsuserdefaults,这是set函数 func setSelectedDivisions(_ division:[Division]) { if (division.count != 0) { self.userDefaults.set(division.toJSONString(), forKey: "selectedDivisions") self.userDefaults.synchronize() } else{ self.userDe

这是set函数

func setSelectedDivisions(_ division:[Division]) {

    if (division.count != 0) {
        self.userDefaults.set(division.toJSONString(), forKey: "selectedDivisions")
        self.userDefaults.synchronize()
    }
    else{
        self.userDefaults.removeObject(forKey: "selectedDivisions")
        self.userDefaults.synchronize()
    }
}
func getSelectedDivisions() -> [Division] {

    if let json = self.userDefaults.value(forKey: "selectedDivisions"){
        print(json)
    }

    if let json = self.userDefaults.value(forKey: "selectedDivisions") as? Array<Dictionary<String, Any>>  {
        if  json.count != 0{
            let  divisions = Mapper<Division>().mapArray(JSONArray: json)
            if divisions.count != 0{
                return divisions
            }
        }
    }
    return []
}
这是get函数

func setSelectedDivisions(_ division:[Division]) {

    if (division.count != 0) {
        self.userDefaults.set(division.toJSONString(), forKey: "selectedDivisions")
        self.userDefaults.synchronize()
    }
    else{
        self.userDefaults.removeObject(forKey: "selectedDivisions")
        self.userDefaults.synchronize()
    }
}
func getSelectedDivisions() -> [Division] {

    if let json = self.userDefaults.value(forKey: "selectedDivisions"){
        print(json)
    }

    if let json = self.userDefaults.value(forKey: "selectedDivisions") as? Array<Dictionary<String, Any>>  {
        if  json.count != 0{
            let  divisions = Mapper<Division>().mapArray(JSONArray: json)
            if divisions.count != 0{
                return divisions
            }
        }
    }
    return []
}
func getSelectedDivisions()->[Division]{
如果让json=self.userDefaults.value(forKey:“selectedDivisions”){
打印(json)
}
如果让json=self.userDefaults.value(forKey:“selectedDivisions”)作为数组{
如果json.count!=0{
让divisions=Mapper().mapArray(JSONArray:json)
如果divisions.count!=0{
返回分区
}
}
}
返回[]
}
在get函数中,我得到的错误告诉我,我的序列化是错误的。 这就是我想要得到的json

[{“姓名”:“أ”、“img”:”http://www.smsalmaali.com/images/cclass/21.jpg,“名称2”:“名称2”:“名称1”:“名称21”,“名称2”:“名称1”。]


有没有办法修复它?

我认为这行代码是错误的

if let json = self.userDefaults.value(forKey: "selectedDivisions") as? Array<Dictionary<String, Any>> 
如果让json=self.userDefaults.value(forKey:“selectedDivisions”)作为?排列
首先,需要将json字符串转换为数组对象,如下所示

let data = (self.userDefaults.value(forKey: "selectedDivisions") as! String).data(using: String.Encoding.utf8) as NSData?
        if data == nil || data!.length == 0 {
            return 
        } else {
            do {
                let resultJSON = try JSONSerialization.jsonObject(with: data! as Data, options: .mutableContainers)
                if let json = resultJSON as? Array<Dictionary<String, Any>>  {
                  // do something
               }
        } catch _ {
          print("exception ")
      }
let data=(self.userDefaults.value(forKey:“selectedDivisions”)作为!String)。数据(使用:String.Encoding.utf8)作为NSData?
如果数据==nil | | data!。长度==0{
返回
}否则{
做{
让resultJSON=try JSONSerialization.jsonObject(使用:data!作为数据,选项:.mutableContainers)
如果让json=resultJSON作为?数组{
//做点什么
}
}接住{
打印(“例外”)
}

使用SwiftyJSON非常简单

Xcode 8+,Swift 3x

func saveJSON(json: JSON) {
    UserDefaults.standard.setValue(j.rawString()!, forKey: "YOUR_KEY")
}

func getJSON() -> JSON {
    return JSON.parse(UserDefaults.standard.value(forKey: "YOUR_KEY") as! String)
}

无论如何,使用usersDefaults来保存大量数据是不好的方法。它不是太大。我被迫使用它