2017-03-22 91 views
1

我有一些错误不..已了解好 我送这个代码JSON解析错误斯威夫特3

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) 
+0

上面的代码本身似乎工作正常。你从哪里得到错误?另外,最好在Swift代码中使用类型信息超过NSArray和NSDictionary的Swift数组和字典... – Fahim

+0

好了,但请教一些教程或示例吗? – marlonpya

+1

查看我的答案更新 - 我添加了一些基于代码输出的有效JSON。 – Fahim

回答

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。

+0

谢谢你的回答 – marlonpya

0

是朋友,我已经解决了吧..有改变

这不是为我工作,所以要改变..

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) 

谢谢大家的回答,我很欣赏它