JSON解析错误Swift 3
Posted
技术标签:
【中文标题】JSON解析错误Swift 3【英文标题】:JSON parse error Swift 3 【发布时间】:2017-03-22 23:15:19 【问题描述】:我有一些不明白的错误.. 好吧,我发送此代码
JSONARRAY
JSON,
JSONARRAY,
JSONARRAY
Y 有这个但不工作或解析不正确,不管两个数组没有添加任何东西
buscarEmpresa=[
"\n \"criterio\" : \"fru\",\n \"tipo\" : \"0\",\n \"idempresa\" : \"82\"\n",
[
],
[
]
]
无法读取数据,因为格式不正确。
试试这个代码..
let usuario = UsuariosQL.getUsuario()!
var jArray: [AnyObject] = []
let jUsuario = NSMutableDictionary()
jUsuario.setValue((phBuscar.text?.trimmingCharacters(in: .whitespacesAndNewlines))!, forKey: "criterio")
jUsuario.setValue(String(describing: usuario.tipo_negocio), forKey: "tipo")
jUsuario.setValue(String(describing: usuario.id_server), forKey: "idempresa")
let jData = try! JSONSerialization.data(withJSONObject: jUsuario, options: .prettyPrinted)
let jStr = NSString(data: jData, encoding: String.Encoding.utf8.rawValue) as! String
jArray.append(jStr as AnyObject)
let jaEmpresarial = NSMutableArray()
for i in receive_empresarial
let jEmpresarial = NSMutableDictionary()
jEmpresarial.setValue(i, forKey: "empresarial")
jaEmpresarial.add(jEmpresarial)
jArray.append(jaEmpresarial)
let jaPais = NSMutableArray()
for i in receive_paises
let jPais = NSMutableDictionary()
jPais.setValue(i, forKey: "pais")
jaPais.add(jPais)
jArray.append(jaPais)
let post = try! JSONSerialization.data(withJSONObject: jArray, options: .prettyPrinted)
let jPost = NSString(data: post, encoding: String.Encoding.utf8.rawValue) as! String
let sesion = URLSession.shared
let parameters = "buscarEmpresa=\(jPost)"
print(parameters)
【问题讨论】:
上面的代码本身似乎工作正常。你从哪里得到错误?此外,在 Swift 代码中使用带有类型信息的 Swift 数组和字典比使用NSArray
和 NSDictionary
更好...
好的,但是请给一些教程或示例?
查看我的答案的更新 - 我根据您的代码输出添加了一些有效的 JSON。
【参考方案1】:
生成的数据不是有效的 JSON。这可能就是您收到错误的原因。您可以使用 JSON 验证器来验证这一点,如果您愿意,但取决于您希望如何设置,您可能需要这行 JSON:
\n \"criterio\" : \"some criteria\",\n \"tipo\" : \"Type\",\n \"idempresa\" : \"ID\"\n
在 JSON 对象中表示为键值对,或表示为键的值。像这样的东西是有效的:
"criterio": "some criteria",
"tipo": "Type",
"idempresa": "ID",
"empresarial": [
"empresarial": 1
,
"empresarial": 2
,
"empresarial": 3
,
"empresarial": 4
],
"pais": [
"pais": 10
,
"pais": 20
,
"pais": 30
]
您可以使用此JSON validator 来验证您自己的 JSON。
【讨论】:
【参考方案2】:朋友们,我已经解决了..有变化
这对我不起作用,所以进行更改..
let usuario = UsuarioSQL.getUsuario()!
var jArray: [AnyObject] = []
let jUsuario = NSMutableDictionary()
jUsuario.setValue((phBuscar.text?.trimmingCharacters(in: .whitespacesAndNewlines))!, forKey: "criterio")
jUsuario.setValue(String(describing: usuario.tipo_negocio), forKey: "tipo")
jUsuario.setValue(String(describing: usuario.id_server), forKey: "idempresa")
let jData = try! JSONSerialization.data(withJSONObject: jUsuario, options: .prettyPrinted)
let jStr = NSString(data: jData, encoding: String.Encoding.utf8.rawValue) as! String
jArray.append(jStr as AnyObject)
这对我来说很好用
let usuario = UsuarioSQL.getUsuario()!
var jArray: [AnyObject] = []
let jUser: NSMutableDictionary = [
"criterio" : String(describing: phBuscar.text!.trimmingCharacters(in: .whitespacesAndNewlines)),
"tipo" : String(usuario.tipo_negocio),
"idempresa" : String(usuario.id_server)
]
jArray.append(jUser)
最后我还对循环进行了更改
let usuario = UsuarioSQL.getUsuario()!
var jArray: [AnyObject] = []
let jUser: NSMutableDictionary = [
"criterio" : String(describing: phBuscar.text!.trimmingCharacters(in: .whitespacesAndNewlines)),
"tipo" : String(usuario.tipo_negocio),
"idempresa" : String(usuario.id_server)
]
jArray.append(jUser)
let jaEmpresarial = NSMutableArray()
for i in receive_empresarial
let jEmpresarial: NSMutableDictionary = [
"empresarial" : i
]
jaEmpresarial.add(jEmpresarial)
jArray.append(jaEmpresarial)
let jaPais = NSMutableArray()
for i in receive_paises
let jPais:NSMutableDictionary = [
"pais" : i
]
jaPais.add(jPais)
jArray.append(jaPais)
let post = try! JSONSerialization.data(withJSONObject: jArray, options: .prettyPrinted)
let jPost = NSString(data: post, encoding: String.Encoding.utf8.rawValue) as! String
let sesion = URLSession.shared
let parameters = "buscarEmpresa=\(jPost)"
print(parameters)
谢谢大家的回答,非常感谢
【讨论】:
以上是关于JSON解析错误Swift 3的主要内容,如果未能解决你的问题,请参考以下文章
Swift json 解析错误:无法将 NSCFConstantString 类型的值转换为 NSArray