iOS-无法将“字符串”类型的值转换为预期的参数类型“数据”

Posted

技术标签:

【中文标题】iOS-无法将“字符串”类型的值转换为预期的参数类型“数据”【英文标题】:iOS-Cannot convert value of type 'String' to expected argument type 'Data' 【发布时间】:2018-04-26 11:58:02 【问题描述】:

我有一个 JSON 数据作为字符串,我想将此数据解码为对象列表,但我收到此错误:“无法将 'String' 类型的值转换为预期的参数类型 'Data'”

这是我的代码:

struct DatabaseObject: Decodable
    var CityNameL = ""
    var DBName = ""
    var DBNameID = 0
    var IDName = ""


func jsonToObject(json:String)


    do
     let databases = try  JSONDecoder().decode(DatabaseObject.self,from: json)
    catch let jsonErr 
     print(jsonErr)
    
 

这是json数据:

["CityNameL":"Skeleton East","DBName":"SkeletonEAST","DBNameID":29,"IDName":"SKELETONEASTLOCAL","CityNameL":"SKELETON DEMO/SKELETON DEMO","DBName":"SKELETONDEMO","DBNameID":30,"IDName":"SKELETONEASTDOT2","CityNameL":"SKELETONPARAMS","DBName":"FFMSCENTRAL","DBNameID":31,"IDName":"FFMSCENTRALLOCAL","CityNameL":"SKELECBM","DBName":"SKELETONFFMS","DBNameID":32,"IDName":"LOCAL"]

那么有没有办法将字符串转换为数据,或者有其他方法可以解码它。

【问题讨论】:

JSONDecoder().decode(DatabaseObject.self,from: json) from 参数必须是 Data 对象,而不是 String 对象。要么你之前有一个Data 并且通过它,或者你有JSONDecoder().decode(DatabaseObject.self, from: json.data(encoding: .utf8)) 我试过 json.data(encoding: .utf8)) 但我得到了这个错误: typeMismatch(Swift.Dictionary, Swift.DecodingError.Context(codingPath: [], debugDescription:“应解码 Dictionary,但找到了一个数组。”,underlyingError: nil)) debugDescription 会准确地告诉您出了什么问题。 预期是你所做的,发现是它实际上是什么。 JSONDecoder().decode([DatabaseObject].self,from: json.data(encoding: .utf8)),但这是一个疯狂的猜测,因为您不想向我们展示 JSON。 是的,我知道,但我是 ios 新手,我不知道具体的解决方案是什么 【参考方案1】:

试试这个把你的String json 转换成Data

import Foundation

struct DatabaseObject: Decodable
    var CityNameL : String
    var DBName  : String
    var DBNameID  : Int
    var IDName  : String



func jsonToObject(json:Data)
    do
       // let somedata = Data(json.utf8)
       let databases = try  JSONDecoder().decode([DatabaseObject].self,from: json)
       print(databases)
    catch let jsonErr 
     print(jsonErr)
    
 

let json = """
["CityNameL":"Skeleton East","DBName":"SkeletonEAST","DBNameID":29,"IDName":"SKELETONEASTLOCAL","CityNameL":"SKELETON DEMO","DBName":"SKELETONDEMO","DBNameID":30,"IDName":"SKELETONEASTDOT2","CityNameL":"SKELETONPARAMS","DBName":"FFMSCENTRAL","DBNameID":31,"IDName":"FFMSCENTRALLOCAL","CityNameL":"SKELECBM","DBName":"SKELETONFFMS","DBNameID":32,"IDName":"LOCAL"]
""".data(using: .utf8)! 
// our data in native (JSON) format
jsonToObject(json:json)

【讨论】:

更好let somedata = Data(json.utf8)。从 utf8 字符串转换永远不会失败。 所以让数据库 = 试试 JSONDecoder().decode(DatabaseObject.self,from: Data(json.utf8)) 。 @vadian (Y) 是的,但是DatabaseObject 应该是一个数组。 我仍然收到这个捕获错误:typeMismatch(Swift.Dictionary, Swift.DecodingError.Context(codingPath: [], debugDescription: "Expected to decode Dictionary > 但找到了一个数组。”,基础错误:无)) @aoemail 再次:请阅读 cmets(并学习阅读 JSON)。 Larme 的第二条评论给了你解决方案:它是JSONDecoder().decode([DatabaseObject].self ...。注意在 Swift 和 JSON 中表示数组的 方括号

以上是关于iOS-无法将“字符串”类型的值转换为预期的参数类型“数据”的主要内容,如果未能解决你的问题,请参考以下文章

无法将“字符串”类型的值转换为预期的参数类型 [任何]

无法将 uibutton 类型的值转换为预期的参数字符串

无法将“字符串”类型的值转换为预期的参数类型

无法将“字符串”类型的值转换为预期的参数类型“布尔”

无法将“字符串”类型的值转换为预期的参数类型“数据”

将录制的视频保存到照片库 - 无法将“URL”类型的值转换为预期的参数类型“字符串”