我需要将let JSON字符串转换为对象。 这是一些带有示例的代码,但是不起作用
let json = "{ \"data\": [ { \"id\": \"201819S1911921391192161352\", \"unidadeCurricularId\": 18734, \"unidadeCurricularNome\": \"Algoritmos e Estruturas de Dados\", \"unidadeCurricularAbreviatura\": \"AED\", \"unidadeCurricularAtivo\": \"1\", \"unidadeCurricularIdMapSiges\": 9119213, \"anoCurricularId\": 3, \"anoCurricularNome\": \"2\", \"anoCurricularAtivo\": 1, \"anoCurricularIdMapSiges\": 2, \"periodoTempoId\": 5, \"periodoTempoNome\": \"1º Semestre\", \"periodoTempoAbreviatura\": \"1\", \"periodoTempoOrdem\": 1, \"periodoTempoAtivo\": 1, \"periodoTempoIdMapSiges\": \"S1\", \"numeroEstudante\": \"2140259\", \"idAnoLetivo\": 31, \"idUnidadeCurricular\": 18734, \"idEstadoInscricao\": 12, \"idAnoCurricular\": 3, \"numero_creditos\": 6 }, { \"id\": \"201819S1911921391192161352\", \"unidadeCurricularId\": 18735, \"unidadeCurricularNome\": \"Programação Avançada\", \"unidadeCurricularAbreviatura\": \"PA\", \"unidadeCurricularAtivo\": \"1\", \"unidadeCurricularIdMapSiges\": 9119213, \"anoCurricularId\": 3, \"anoCurricularNome\": \"2\", \"anoCurricularAtivo\": 1, \"anoCurricularIdMapSiges\": 2, \"periodoTempoId\": 5, \"periodoTempoNome\": \"1º Semestre\", \"periodoTempoAbreviatura\": \"1\", \"periodoTempoOrdem\": 1, \"periodoTempoAtivo\": 1, \"periodoTempoIdMapSiges\": \"S1\", \"numeroEstudante\": \"2140259\", \"idAnoLetivo\": 31, \"idUnidadeCurricular\": 18734, \"idEstadoInscricao\": 12, \"idAnoCurricular\": 3, \"numero_creditos\": 7 }, { \"id\": \"201819S1911921391192161352\", \"unidadeCurricularId\": 18735, \"unidadeCurricularNome\": \"Álgebra Linear\", \"unidadeCurricularAbreviatura\": \"AlgL\", \"unidadeCurricularAtivo\": \"1\", \"unidadeCurricularIdMapSiges\": 9119213, \"anoCurricularId\": 3, \"anoCurricularNome\": \"1\", \"anoCurricularAtivo\": 1, \"anoCurricularIdMapSiges\": 1, \"periodoTempoId\": 5, \"periodoTempoNome\": \"1º Semestre\", \"periodoTempoAbreviatura\": \"1\", \"periodoTempoOrdem\": 1, \"periodoTempoAtivo\": 1, \"periodoTempoIdMapSiges\": \"S1\", \"numeroEstudante\": \"2140259\", \"idAnoLetivo\": 31, \"idUnidadeCurricular\": 18734, \"idEstadoInscricao\": 12, \"idAnoCurricular\": 3, \"numero_creditos\": 7 } ] }";
let data = json.data(using: .utf8)!
do {
if let jsonArray = try JSONSerialization.jsonObject(with: data, options : .allowFragments) as? [Dictionary<String,Any>]
{
let ucIdMapSiges = jsonArray["unidadeCurricularIdMapSiges"] as! Int
let ucNome = jsonArray["unidadeCurricularNome"] as! String
} else {
print("bad json")
}
} catch let error as NSError {
print(error)
}
答案 0 :(得分:1)
您的json根是字典,其中data
键是数组,请尝试
do {
if let jsonArray = try JSONSerialization.jsonObject(with:Data(json.utf8), options :[]) as? Dictionary<String,Any> , let data = jsonArray["data"] as? [[String:Any]] {
data.forEach {
let ucIdMapSiges = $0["unidadeCurricularIdMapSiges"] as? Int
let ucNome = $0["unidadeCurricularNome"] as? String
print(ucIdMapSiges,ucNome)
}
}
}
catch {
print(error)
}
最好也
do {
let res = try JSONDecoder().decode(Root.self, from:Data(json.utf8))
print(res.data)
}
catch {
print(error)
}
struct Root : Codable {
let data:[Model]
}
struct Model : Codable {
let unidadeCurricularIdMapSiges:Int
let unidadeCurricularNome:String
}
答案 1 :(得分:0)
jsonArray
是Dictionary
而不是Array
。您需要通过使用键data
尝试一下
guard let data = json.data(using: .utf8) else {
return
}
do {
if let jsonDictionary = try JSONSerialization.jsonObject(with: data, options : .allowFragments) as? Dictionary<String,Any>
{
if let dataArray = jsonDictionary["data"] as? [[String:Any]] {
for data in dataArray {
if let ucIdMapSiges = data["unidadeCurricularIdMapSiges"] as? Int,
let ucNome = data["unidadeCurricularNome"] as? String {
print(ucIdMapSiges)
print(ucNome)
}
}
}
} else {
print("bad json")
}
} catch let error as NSError {
print(error)
}
答案 2 :(得分:-1)
不工作
import SwiftyJSON
let jsonData = json.stringValue.data(using: String.Encoding.utf8, allowLossyConversion: false)
let jsonObject = try! JSON(data: jsonData!)
很抱歉,我检查不正确,因为我用手机复制了代码。我在xCode中检查了一下,此代码有效
工作:
import SwiftyJSON
let json = "{ \"data\": [ { \"id\": \"201819S1911921391192161352\", \"unidadeCurricularId\": 18734, \"unidadeCurricularNome\": \"Algoritmos e Estruturas de Dados\", \"unidadeCurricularAbreviatura\": \"AED\", \"unidadeCurricularAtivo\": \"1\", \"unidadeCurricularIdMapSiges\": 9119213, \"anoCurricularId\": 3, \"anoCurricularNome\": \"2\", \"anoCurricularAtivo\": 1, \"anoCurricularIdMapSiges\": 2, \"periodoTempoId\": 5, \"periodoTempoNome\": \"1º Semestre\", \"periodoTempoAbreviatura\": \"1\", \"periodoTempoOrdem\": 1, \"periodoTempoAtivo\": 1, \"periodoTempoIdMapSiges\": \"S1\", \"numeroEstudante\": \"2140259\", \"idAnoLetivo\": 31, \"idUnidadeCurricular\": 18734, \"idEstadoInscricao\": 12, \"idAnoCurricular\": 3, \"numero_creditos\": 6 }, { \"id\": \"201819S1911921391192161352\", \"unidadeCurricularId\": 18735, \"unidadeCurricularNome\": \"Programação Avançada\", \"unidadeCurricularAbreviatura\": \"PA\", \"unidadeCurricularAtivo\": \"1\", \"unidadeCurricularIdMapSiges\": 9119213, \"anoCurricularId\": 3, \"anoCurricularNome\": \"2\", \"anoCurricularAtivo\": 1, \"anoCurricularIdMapSiges\": 2, \"periodoTempoId\": 5, \"periodoTempoNome\": \"1º Semestre\", \"periodoTempoAbreviatura\": \"1\", \"periodoTempoOrdem\": 1, \"periodoTempoAtivo\": 1, \"periodoTempoIdMapSiges\": \"S1\", \"numeroEstudante\": \"2140259\", \"idAnoLetivo\": 31, \"idUnidadeCurricular\": 18734, \"idEstadoInscricao\": 12, \"idAnoCurricular\": 3, \"numero_creditos\": 7 }, { \"id\": \"201819S1911921391192161352\", \"unidadeCurricularId\": 18735, \"unidadeCurricularNome\": \"Álgebra Linear\", \"unidadeCurricularAbreviatura\": \"AlgL\", \"unidadeCurricularAtivo\": \"1\", \"unidadeCurricularIdMapSiges\": 9119213, \"anoCurricularId\": 3, \"anoCurricularNome\": \"1\", \"anoCurricularAtivo\": 1, \"anoCurricularIdMapSiges\": 1, \"periodoTempoId\": 5, \"periodoTempoNome\": \"1º Semestre\", \"periodoTempoAbreviatura\": \"1\", \"periodoTempoOrdem\": 1, \"periodoTempoAtivo\": 1, \"periodoTempoIdMapSiges\": \"S1\", \"numeroEstudante\": \"2140259\", \"idAnoLetivo\": 31, \"idUnidadeCurricular\": 18734, \"idEstadoInscricao\": 12, \"idAnoCurricular\": 3, \"numero_creditos\": 7 } ] }";
let jsonData = json.data(using: String.Encoding.utf8, allowLossyConversion: false)
let jsonObject = try! JSON(data: jsonData!)
print(jsonObject["data"])
输出:
[ { “ unidadeCurricularIdMapSiges”:9119213, “ idAnoCurricular”:3, “ anoCurricularAtivo”:1 “ unidadeCurricularId”:18734, “ periodoTempoOrdem”:1 “ idAnoLetivo”:31, “ idEstadoInscricao”:12 “ periodoTempoAtivo”:1, “ id”:“ 201819S1911921391192161352”, “ idUnidadeCurricular”:18734, “ unidadeCurricularAbreviatura”:“ AED”, “ anoCurricularId”:3, “ periodoTempoIdMapSiges”:“ S1”, “ numeroEstudante”:“ 2140259”, “ periodoTempoAbreviatura”:“ 1”, “ anoCurricularIdMapSiges”:2 “ unidadeCurricularAtivo”:“ 1”, “ numero_creditos”:6 “ unidadeCurricularNome”:“ Algoritmos e Estruturas de Dados”, “ periodoTempoNome”:“1ºSemestre”, “ periodoTempoId”:5 “ anoCurricularNome”:“ 2” }, { “ unidadeCurricularIdMapSiges”:9119213, “ idAnoCurricular”:3, “ anoCurricularAtivo”:1 “ unidadeCurricularId”:18735, “ periodoTempoOrdem”:1 “ idAnoLetivo”:31, “ idEstadoInscricao”:12 “ periodoTempoAtivo”:1, “ id”:“ 201819S1911921391192161352”, “ idUnidadeCurricular”:18734, “ unidadeCurricularAbreviatura”:“ PA”, “ anoCurricularId”:3, “ periodoTempoIdMapSiges”:“ S1”, “ numeroEstudante”:“ 2140259”, “ periodoTempoAbreviatura”:“ 1”, “ anoCurricularIdMapSiges”:2 “ unidadeCurricularAtivo”:“ 1”, “ numero_creditos”:7 “ unidadeCurricularNome”:“ProgramaçãoAvançada”, “ periodoTempoNome”:“1ºSemestre”, “ periodoTempoId”:5 “ anoCurricularNome”:“ 2” }, { “ unidadeCurricularIdMapSiges”:9119213, “ idAnoCurricular”:3, “ anoCurricularAtivo”:1 “ unidadeCurricularId”:18735, “ periodoTempoOrdem”:1 “ idAnoLetivo”:31, “ idEstadoInscricao”:12 “ periodoTempoAtivo”:1, “ id”:“ 201819S1911921391192161352”, “ idUnidadeCurricular”:18734, “ unidadeCurricularAbreviatura”:“ AlgL”, “ anoCurricularId”:3, “ periodoTempoIdMapSiges”:“ S1”, “ numeroEstudante”:“ 2140259”, “ periodoTempoAbreviatura”:“ 1”, “ anoCurricularIdMapSiges”:1 “ unidadeCurricularAtivo”:“ 1”, “ numero_creditos”:7 “ unidadeCurricularNome”:“ÁlgebraLinear”, “ periodoTempoNome”:“1ºSemestre”, “ periodoTempoId”:5 “ anoCurricularNome”:“ 1” } ]