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
将麻烦的JSON字符串转换为Swift中的对象_Json_Swift_String_Object - Fatal编程技术网

将麻烦的JSON字符串转换为Swift中的对象

将麻烦的JSON字符串转换为Swift中的对象,json,swift,string,object,Json,Swift,String,Object,我有一个无法转换为JSON的字符串。在搜索的前几页中,我尝试了JSONDecode、JSONSerialization和所有其他建议。我还试着把它解码成可编码的结构 我认为数据中包含换行符(“\r\n”)这一事实可能会有问题,所以我也尝试删除这些换行符,并删除空白(有很多,我想让一些讨厌的、不可打印的东西不在其中)。绳子在这里,它很长 var rawData: String = "{\r\n \"contacts\": [\r\n {\r\n \

我有一个无法转换为JSON的字符串。在搜索的前几页中,我尝试了JSONDecode、JSONSerialization和所有其他建议。我还试着把它解码成可编码的结构

我认为数据中包含换行符(“\r\n”)这一事实可能会有问题,所以我也尝试删除这些换行符,并删除空白(有很多,我想让一些讨厌的、不可打印的东西不在其中)。绳子在这里,它很长

var rawData: String = "{\r\n    \"contacts\": [\r\n        {\r\n                \"id\": \"c200\",\r\n                \"name\": \"Ravi Tamada\",\r\n                \"email\": \"ravi@gmail.com\",\r\n                \"address\": \"xx-xx-xxxx,x - street, x - country\",\r\n                \"gender\" : \"male\",\r\n                \"phone\": {\r\n                    \"mobile\": \"+91 0000000000\",\r\n                    \"home\": \"00 000000\",\r\n                    \"office\": \"00 000000\"\r\n                }\r\n        },\r\n        {\r\n                \"id\": \"c201\",\r\n                \"name\": \"Johnny Depp\",\r\n                \"email\": \"johnny_depp@gmail.com\",\r\n                \"address\": \"xx-xx-xxxx,x - street, x - country\",\r\n                \"gender\" : \"male\",\r\n                \"phone\": {\r\n                    \"mobile\": \"+91 0000000000\",\r\n                    \"home\": \"00 000000\",\r\n                    \"office\": \"00 000000\"\r\n                }\r\n        },\r\n        {\r\n                \"id\": \"c202\",\r\n                \"name\": \"Leonardo Dicaprio\",\r\n                \"email\": \"leonardo_dicaprio@gmail.com\",\r\n                \"address\": \"xx-xx-xxxx,x - street, x - country\",\r\n                \"gender\" : \"male\",\r\n                \"phone\": {\r\n                    \"mobile\": \"+91 0000000000\",\r\n                    \"home\": \"00 000000\",\r\n                    \"office\": \"00 000000\"\r\n                }\r\n        },\r\n        {\r\n                \"id\": \"c203\",\r\n                \"name\": \"John Wayne\",\r\n                \"email\": \"john_wayne@gmail.com\",\r\n                \"address\": \"xx-xx-xxxx,x - street, x - country\",\r\n                \"gender\" : \"male\",\r\n                \"phone\": {\r\n                    \"mobile\": \"+91 0000000000\",\r\n                    \"home\": \"00 000000\",\r\n                    \"office\": \"00 000000\"\r\n                }\r\n        },\r\n        {\r\n                \"id\": \"c204\",\r\n                \"name\": \"Angelina Jolie\",\r\n                \"email\": \"angelina_jolie@gmail.com\",\r\n                \"address\": \"xx-xx-xxxx,x - street, x - country\",\r\n                \"gender\" : \"female\",\r\n                \"phone\": {\r\n                    \"mobile\": \"+91 0000000000\",\r\n                    \"home\": \"00 000000\",\r\n                    \"office\": \"00 000000\"\r\n                }\r\n        },\r\n        {\r\n                \"id\": \"c205\",\r\n                \"name\": \"Dido\",\r\n                \"email\": \"dido@gmail.com\",\r\n                \"address\": \"xx-xx-xxxx,x - street, x - country\",\r\n                \"gender\" : \"female\",\r\n                \"phone\": {\r\n                    \"mobile\": \"+91 0000000000\",\r\n                    \"home\": \"00 000000\",\r\n                    \"office\": \"00 000000\"\r\n                }\r\n        },\r\n        {\r\n                \"id\": \"c206\",\r\n                \"name\": \"Adele\",\r\n                \"email\": \"adele@gmail.com\",\r\n                \"address\": \"xx-xx-xxxx,x - street, x - country\",\r\n                \"gender\" : \"female\",\r\n                \"phone\": {\r\n                    \"mobile\": \"+91 0000000000\",\r\n                    \"home\": \"00 000000\",\r\n                    \"office\": \"00 000000\"\r\n                }\r\n        },\r\n        {\r\n                \"id\": \"c207\",\r\n                \"name\": \"Hugh Jackman\",\r\n                \"email\": \"hugh_jackman@gmail.com\",\r\n                \"address\": \"xx-xx-xxxx,x - street, x - country\",\r\n                \"gender\" : \"male\",\r\n                \"phone\": {\r\n                    \"mobile\": \"+91 0000000000\",\r\n                    \"home\": \"00 000000\",\r\n                    \"office\": \"00 000000\"\r\n                }\r\n        },\r\n        {\r\n                \"id\": \"c208\",\r\n                \"name\": \"Will Smith\",\r\n                \"email\": \"will_smith@gmail.com\",\r\n                \"address\": \"xx-xx-xxxx,x - street, x - country\",\r\n                \"gender\" : \"male\",\r\n                \"phone\": {\r\n                    \"mobile\": \"+91 0000000000\",\r\n                    \"home\": \"00 000000\",\r\n                    \"office\": \"00 000000\"\r\n                }\r\n        },\r\n        {\r\n                \"id\": \"c209\",\r\n                \"name\": \"Clint Eastwood\",\r\n                \"email\": \"clint_eastwood@gmail.com\",\r\n                \"address\": \"xx-xx-xxxx,x - street, x - country\",\r\n                \"gender\" : \"male\",\r\n                \"phone\": {\r\n                    \"mobile\": \"+91 0000000000\",\r\n                    \"home\": \"00 000000\",\r\n                    \"office\": \"00 000000\"\r\n                }\r\n        },\r\n        {\r\n                \"id\": \"c2010\",\r\n                \"name\": \"Barack Obama\",\r\n                \"email\": \"barack_obama@gmail.com\",\r\n                \"address\": \"xx-xx-xxxx,x - street, x - country\",\r\n                \"gender\" : \"male\",\r\n                \"phone\": {\r\n                    \"mobile\": \"+91 0000000000\",\r\n                    \"home\": \"00 000000\",\r\n                    \"office\": \"00 000000\"\r\n                }\r\n        },\r\n        {\r\n                \"id\": \"c2011\",\r\n                \"name\": \"Kate Winslet\",\r\n                \"email\": \"kate_winslet@gmail.com\",\r\n                \"address\": \"xx-xx-xxxx,x - street, x - country\",\r\n                \"gender\" : \"female\",\r\n                \"phone\": {\r\n                    \"mobile\": \"+91 0000000000\",\r\n                    \"home\": \"00 000000\",\r\n                    \"office\": \"00 000000\"\r\n                }\r\n        },\r\n        {\r\n                \"id\": \"c2012\",\r\n                \"name\": \"Eminem\",\r\n                \"email\": \"eminem@gmail.com\",\r\n                \"address\": \"xx-xx-xxxx,x - street, x - country\",\r\n                \"gender\" : \"male\",\r\n                \"phone\": {\r\n                    \"mobile\": \"+91 0000000000\",\r\n                    \"home\": \"00 000000\",\r\n                    \"office\": \"00 000000\"\r\n                }\r\n        }\r\n    ]\r\n}"
字符串只是来自的演示数据


任何想法、想法或工作样本都会很好。我知道这是一个听起来很常见的问题,但尝试了几乎所有方法后,我仍然无法让它正常工作。

JSONDecoder
不关心空格或换行符,只要它是格式良好的JSON。想一想你的模型应该是什么样子,而不是担心新行字符

通过快速查看JSON,我创建了以下模型结构:

struct Phone : Codable {
    let mobile: String
    let home: String
    let office: String
}

struct Contact : Codable {
    let id: String
    let name: String
    let email: String
    let address: String
    let gender: String
    let phone: Phone
}

struct Contacts : Codable {
    let contacts: [Contact]
}
您只需解码一个
联系人
对象,如下所示:

let json = try! Data.init(contentsOf: URL(string: "https://api.androidhive.info/contacts/")!)
let decoder = JSONDecoder()
let contacts = try! decoder.decode(Contacts.self, from: json)
无法解码的一个可能原因可能是复制JSON字符串并使其成为单行时出错。正如您在这里看到的,我使用
Data.init(contentsOf:)
来获取数据。这比自己复制和粘贴字符串要可靠得多

还请注意,Swift中有多行字符串文字:

let jsonString = """
your multiline JSON can go here...
"""

我不明白,做
让rawDataData=rawData.data(使用:.utf8);让json=试试?JSONSerialization.jsonObject(带有:rawDataData!,选项:[])
对我来说很有用(有一本字典)。那么你目前的问题是什么?最后你想要什么?你能展示一下你的结构/最终对象吗?这很有效。对不起,这个愚蠢的问题,我以前试过这个方法,结果是零。我一定是打错了。如果你将此作为答复,我将接受。非常感谢。如果这起作用,Codable也应该如此。关于JSON序列化有很多问题,所以请找到一个重复的问题,并将其标记为相同的问题,或者删除它,因为问题太多,您可能已经输入了错误。注释中的答案是有效的,但这就是我想这样做的,当我尝试时,由于一些奇怪的原因,它不起作用。我确实把绳子做成了一行。很好的建议。