[英]Swift4: Error while decoding json from file
这是我的第一篇文章,所以我希望一切都按原样安排。 我希望任何人都可以帮助我解决我的问题。
从下载的文件在Swift中解码JSON时遇到以下问题:
vocabulary.json文件包含以下内容:
[
{
"english": "one",
"deutsch": "eins",
"theme": "numbers"
},
{
"english": "two",
"deutsch": "zwei",
"theme": "numbers"
}
]
我的Swift 4-代码:
public struct Vocabulary: Codable{
let english: String
let deutsch: String
let theme: String
}
func decodeData(){
DataManager.getJSONFromURL("vokabeln") { (data, error) in
guard let data = data else {
return
}
let decoder = JSONDecoder()
do {
let vocabulary = try decoder.decode(Vocabulary.self, from: data)
print(vocabulary)
} catch let e {
print("failed to convert data \(e)")
}
}
}
public final class DataManager {
public static func getJSONFromURL(_ resource:String, completion:@escaping (_ data:Data?, _ error:Error?) -> Void) {
DispatchQueue.global(qos: .background).async {
let url = URL(string: "https://onedrive.live.com/xxxxx/vokabeln.json")
let data = try! Data(contentsOf: url!, options: .uncached)
completion(data, nil)
}
}
}
如果我从以下多个字符串解码Json:
public let vokabeln: String = """
[
{
"english": "one",
"deutsch": "eins",
"theme": "numbers"
},
{
"english": "two",
"deutsch": "zwei",
"theme": "numbers"
}
]
"""
它可以工作,但是如果我尝试从文件中解码它,则会收到以下错误消息:
无法转换数据dataCorrupted(Swift.DecodingError.Context(codingPath:[],debugDescription:“给定的数据不是有效的JSON。”,底层错误:可选(错误域= NSCocoaErrorDomain代码= 3840,JSON文本不是以数组或对象和允许未设置片段的选项。“ UserInfo = {NSDebugDescription = JSON文本不是以数组或对象开头,并且不允许设置片段的选项开头。}))
先感谢您。
亲切的问候,
凯
改变这个
let vocabulary = try decoder.decode(Vocabulary.self, from: data)
对此
let vocabulary = try decoder.decode([Vocabulary].self, from: data)
它会给阵列Vocabulary
就像[Vocabulary]
。
我希望这能帮到您。
我收到一个非常类似的错误:
捕获:dataCorrupted(Swift.DecodingError.Context(codingPath:[],debugDescription:“给定的数据不是有效的JSON。”,underlyingError:可选(错误域= NSCocoaErrorDomain代码= 3840“字符64附近格式错误的对象。” UserInfo = {NSDebugDescription =字符64附近格式错误的对象。})))
但是出于完全不同的原因:
我的本地json是这样创建的:
"""
{
"name": "Durian",
"rate": 600,
"city": "Cali"
"description": "A fruit with a distinctive scent."
}
"""
错误消息非常明显。 我已经忘了把,
“卡利”之后。
如果我理解正确,那么要计数64个字符,就必须从“名称”所在行的开头开始计数。 表示每行前面有4个空字符。 因此,数字约为64。 您无需在{
:)行中计算空格
放置逗号即可解决此问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.