Быстрый разбор JSON читать как ноль - PullRequest
1 голос
/ 11 октября 2019

Итак, я пытаюсь проанализировать jsondecoder, и когда я вижу в меню журнала, все данные в json равны нулю. В то время как у json, который я проверяю, у всех почтальонов есть данные

, поэтому вот json, который я хочу проанализировать (* я просто хочу разобрать строку):

{
    "  user": {
    "command": "SELECT",
    "rowCount": 1,
    "oid": null,
    "rows": [
        {
            "user_id": 193,
            "u_name": "Gunawan Wibisono",
            "email": "gunwibi89@gmail.com",
            "div_name": "Design Aplication & Infrastructure",
            "url": "2"
        }
    ],
    "fields": [
        {
            "name": "user_id",
            "tableID": 1656774,
            "columnID": 1,
            "dataTypeID": 23,
            "dataTypeSize": 4,
            "dataTypeModifier": -1,
            "format": "text"
        },
        {
            "name": "u_name",
            "tableID": 1656774,
            "columnID": 2,
            "dataTypeID": 1043,
            "dataTypeSize": -1,
            "dataTypeModifier": 54,
            "format": "text"
        },
        {
            "name": "email",
            "tableID": 1656774,
            "columnID": 3,
            "dataTypeID": 1043,
            "dataTypeSize": -1,
            "dataTypeModifier": 259,
            "format": "text"
        },
        {
            "name": "div_name",
            "tableID": 1656724,
            "columnID": 2,
            "dataTypeID": 1043,
            "dataTypeSize": -1,
            "dataTypeModifier": 259,
            "format": "text"
        },
        {
            "name": "url",
            "tableID": 1656774,
            "columnID": 9,
            "dataTypeID": 1043,
            "dataTypeSize": -1,
            "dataTypeModifier": 259,
            "format": "text"
        }
    ],
    "_parsers": [
        null,
        null,
        null,
        null,
        null
    ],
    "_types": {
        "_types": {
            "arrayParser": {}
        },
        "text": {},
        "binary": {}
    },
    "RowCtor": null,
    "rowAsArray": false
   },
     "status": 1
 }

это код:

struct User : Codable {

let command : String?
let rowCount : Int?
let oid : Int?
let rows : [Rowss]?
}

struct Rowss : Codable {
let user_id: Int?
let u_name : String?
let email : String?
let div_name: String?
let url : String?

enum Codingkeys : String, CodingKey {
    case user_id = "user_id"
    case u_name = "u_name"
    case email = "email"
    case div_name = "div_name"
    case url = "url"
    }
  }


   func Json() {
    let user = UserName.text
    let pass = Password.text

    let json = "http://ratings.immobispsa.com/getslogs/\(user!)/\(pass!)"

    guard let myUrl = URL(string: json) else { return }

    URLSession.shared.dataTask(with: myUrl) { (data, response, error) in
        guard let data = data else {return}

        do{
            let user = try JSONDecoder().decode(User.self, from: data)
            print("this is the json\(user)")
        }catch{
            print(error)
        }
    }.resume()

это меню журнала после сборки:

"это jsonUser (команда: nil, rowCount: nil, oid: nil, row: nil)"

Есть идеи, где я поступил неправильно?

1 Ответ

0 голосов
/ 11 октября 2019

Ваша Codable структура неверна. Вы должны ссылаться на некоторые учебники для того же. Вот Codable structure согласно вашему ответу:

struct UserResponse: Codable {
    let status: Int
    let user: User

    private enum CodingKeys: String, CodingKey {
        case status
        case user = "  user"
    }
}

struct User: Codable {
    let command: String?
    let rowCount: Int?
    let oid: Int?
    let rowCtor: Int?
    let rowAsArray: Bool?
    let rows: [Rows]?
    let fields: [Fields]?
    let parsers: [Parsers]?
    let types: Type?

    private enum CodingKeys: String, CodingKey {
        case command
        case rowCount
        case oid
        case rowCtor = "RowCtor"
        case rowAsArray
        case rows
        case fields
        case parsers = "_parsers"
        case types = "_types"
    }
}

struct Rows: Codable {
    let userId: Int
    let uName: String
    let email: String
    let divName: String
    let url: String

    private enum CodingKeys: String, CodingKey {
        case userId = "user_id"
        case uName = "u_name"
        case email
        case divName = "div_name"
        case url
    }
}

struct Fields: Codable {
    let name: String
    let tableID: Int
    let columnID: Int
    let datatypeID: Int?
    let dataTypeSize: Int
    let dataTypeModifier: Int
    let format: String

    private enum CodingKeys: String, CodingKey {
        case name
        case tableID
        case columnID
        case datatypeID
        case dataTypeSize
        case dataTypeModifier
        case format
    }
}

struct Parsers: Codable {

}

struct Types: Codable {
    let types: Type?
    let text: Text?
    let binary: Binary?

    private enum CodingKeys: String, CodingKey {
        case types = "_types"
        case text
        case binary
    }
}

struct Type: Codable {

}

struct Text: Codable {

}

struct Binary: Codable {

}

Если любое значение может прийти как null, то пометьте его только как optional (?), в противном случае don't, и в JSON вашего пользователя. Клавиша имеет дополнительное пространство впереди, как " user", ваш API разработчик должен исправить это, если это возможно.

Теперь расшифруйте его:

do{
    let decodeResponse = try JSONDecoder().decode(UserResponse.self, from: data)
    print("this is the json\(decodeResponse.user)")
}catch{
    print(error)
}
...