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.DictionaryJSONDecoder().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.DictionaryJSONDecoder().decode([DatabaseObject].self ...
。注意在 Swift 和 JSON 中表示数组的 方括号。以上是关于iOS-无法将“字符串”类型的值转换为预期的参数类型“数据”的主要内容,如果未能解决你的问题,请参考以下文章