Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在iOS swift中从alamofire/swiftyJson将字典转换为JSON字符串以及将JSON字符串转换为字典_Swift - Fatal编程技术网

如何在iOS swift中从alamofire/swiftyJson将字典转换为JSON字符串以及将JSON字符串转换为字典

如何在iOS swift中从alamofire/swiftyJson将字典转换为JSON字符串以及将JSON字符串转换为字典,swift,Swift,用于转换Json字符串的字典 let dictionary = ["nacho": ["1","2","3"]] let jsonData = try? JSONSerialization.data(withJSONObject: dictionary, options: []) let jsonString = String(data: jsonData!, encoding: .utf8) print(jsonString) Json字符串转换为字典 let jsonString = "{

用于转换Json字符串的字典

let dictionary = ["nacho": ["1","2","3"]]
let jsonData = try? JSONSerialization.data(withJSONObject: dictionary, options: [])
let jsonString = String(data: jsonData!, encoding: .utf8)
print(jsonString)
Json字符串转换为字典

let jsonString = "{\"nacho\":[\"1\",\"2\",\"3\"]}"
let jsonData = jsonString.data(using: .utf8)
let dictionary = try? JSONSerialization.jsonObject(with: jsonData!, options: .mutableLeaves)
print(dictionary!)

另一个例子是巨型蚂蚁用邪恶的诅咒打你
JSONSerialization
。如果采用
Codable
协议稍微详细一点的方式,则可以更好地控制序列化过程,但结果会更容易处理。将以下内容放在一个快速的操场中,以查看差异:

import Cocoa

let dictionary = ["nacho": ["1","2","3"]]
let jsonDt = try? JSONSerialization.data(withJSONObject: dictionary, options: [])
let jsonString = String(data: jsonDt!, encoding: .utf8)!
print(jsonString)

let jsonStr = "{\"nacho\":[\"1\",\"2\",\"3\"]}"
let jsonDat = jsonString.data(using: .utf8)
let dict = try? JSONSerialization.jsonObject(with: jsonDat!, options: .mutableLeaves)
print(dict!)

struct Chips: Codable {
    let nacho: [Int]
}

let chip = Chips(nacho: [1, 2, 3])
print(chip)

let chipData: Data?
do {
    chipData = try JSONEncoder().encode(chip)
    print(String(data:chipData!, encoding:.utf8)!)
} catch {
    print(error)
    chipData = nil
}

if let chipData = chipData {
    do {
        let chips = try JSONDecoder().decode(Chips.self, from: chipData)
        print(chips)
    } catch {
        print(error)
    }
}
正如您所看到的,第一个序列化/反序列化周期中的字符串最终是
Ints
(我怀疑它们应该在第一个位置),即使它们以前是
String
<代码>JSONSerialization.jsonObject似乎对您将获得的类型有自己的想法


在我对
芯片的定义中(因为没有更好的名称),我可以强制使用
[Int]
,这看起来更干净。尝试将此定义更改为
String
的效果。您必须调整对象的初始化,序列化的
字符串
当然会反映更改。与使用
JSONSerialization
的初始解决方案相比,最大的优势在于获得一致的
encode
/
decode
循环,当然,具有稍微不同的属性。选择您喜欢的方式,我相信您的
Alamofire
会很乐意使用其中任何一种方式。

此代码不起作用Alamofire和SwiftJson不起作用..直接NSError print@AmitAlamofire/SwiftJson liberty将getter和setter方法设置为dict to string,将string设置为dict@AmitYou无法将字典转换为JSON!如果要手动构建json,请执行以下操作:让myJSON=json();myJSON[“aaa”]=“aaa”@BhavikAntala如果答案解决了你的问题,那么接受答案将是一种习惯(并在你第一次接受答案时为你赢得一些分数)。否则,请发表评论要求澄清。Alamofire/swiftJson UserDetail字典响应将字符串转换为存储(数据设置器)func setUserDetail(uuUserDetail:string?{let personeCodedobject=NSKeyedArchiver.archivedData(withRootObject:UserDetail!)UserDefaults.standard.set(personEncodedObject,forKey:“UserDetail”)UserDefaults.standard.synchronize()}-data setter complete@patrubut string到字典数据不转换。这是代码不工作静态func UserDetail()->string?{var UserDetail:String?=nil let arcData=UserDefaults.standard.object(forKey:“UserDetail”)UserDetail=NSKeyedUnarchiver.unarchiveObject(with:arcData as!Data)as?String return UserDetail}-@patrut这里有两种不好的风格,首先你不应该把代码放在注释中,如果它超过一行,就把它移到一个问题上。其次你的注释与你最初的问题没有任何关系。请问另一个问题。你将有更多的空间和改进的格式选项来解释你想做什么以及为什么要这样做不起作用,坦率地说,这是非常必要的。