преобразовать строку JSON в объект JSON на swift - PullRequest
0 голосов
/ 14 мая 2019

Мне нужно преобразовать строку 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)
    }

Ответы [ 3 ]

1 голос
/ 14 мая 2019

Ваш корень 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
}
0 голосов
/ 14 мая 2019

НЕ РАБОТАЕТ

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", "NumberroEstudante": "2140259", "periodoTempoAbreviatura": "1", "anoCurricularIdMapSiges": 2, "unidadeCurricularAtivo": "1", "Numberro_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", "NumberroEstudante": "2140259", "periodoTempoAbreviatura": "1", "anoCurricularIdMapSiges": 2, "unidadeCurricularAtivo": "1", "Numberro_Creditos": 7, "unidadeCurricularNome": "Programação Avanç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", "NumberroEstudante": "2140259", "periodoTempoAbreviatura": "1", "anoCurricularIdMapSiges": 1, "unidadeCurricularAtivo": "1", "Numberro_Creditos": 7, "unidadeCurricularNome": "Algebra Linear", "periodoTempoNome": "1º Semestre", "periodoTempoId": 5, "anoCurricularNome": "1" } ]

0 голосов
/ 14 мая 2019

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)
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...