Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift解析json读取为nil_Json_Swift_Parsing_Null - Fatal编程技术网

Swift解析json读取为nil

Swift解析json读取为nil,json,swift,parsing,null,Json,Swift,Parsing,Null,因此,我尝试使用jsondecoder进行解析,当我在日志菜单中看到时,json中的所有数据都是零。虽然我签入的json邮递员都有数据 下面是我要解析的json(*我只想解析行): 代码如下: struct User : Codable { let command : String? let rowCount : Int? let oid : Int? let rows : [Rowss]? } struct Rowss : Codable { let user_id: Int? let u

因此,我尝试使用jsondecoder进行解析,当我在日志菜单中看到时,json中的所有数据都是零。虽然我签入的json邮递员都有数据

下面是我要解析的json(*我只想解析行):

代码如下:

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,行数:nil,oid:nil,行数:nil)


你知道我哪里做错了吗?

你的
Codable
结构错了。你应该参考一些教程。根据您的回答,以下是
可编码结构

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
,那么只将其标记为
可选(?)
,否则
不要
,并且在
JSON
中,您的用户密钥前面有额外的空间,如
“user”
,如果可能,您的
API
开发人员应该修复它

现在解码它:

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

您的
Codable
结构错误。你应该参考一些教程。根据您的回答,以下是
可编码结构

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
,那么只将其标记为
可选(?)
,否则
不要
,并且在
JSON
中,您的用户密钥前面有额外的空间,如
“user”
,如果可能,您的
API
开发人员应该修复它

现在解码它:

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

您的用户可编码在哪里?你能粘贴所有可编码的结构吗?看看它可以帮助你解析JSON,并提供各种选项,你可以根据你的needs@SharadChauhan我已经更新了struct@SahilManchanda我将尝试使用它,感谢tipThis。这是一个很好的例子,说明了为什么默认情况下不应该将属性声明为可选属性。如果它们不是可选的,那么解码器将生成一个错误,这将帮助您意识到您的结构不正确,也许您可以自己修复它。您的用户可编码在哪里?你能粘贴所有可编码的结构吗?看看它可以帮助你解析JSON,并提供各种选项,你可以根据你的needs@SharadChauhan我已经更新了struct@SahilManchanda我将尝试使用它,感谢tipThis。这是一个很好的例子,说明了为什么默认情况下不应该将属性声明为可选属性。如果这些属性不是可选的,那么解码器将生成一个错误,帮助您意识到结构不正确,也许您可以自己修复。您不应该将所有属性设置为可选的,只有您真正确定的属性可以为零。@JoakimDanielson同意,这就是为什么我添加了这一点,因为我不知道答案。但由于存在空值,它们可能都是空值,也可能不是空值。所以我假设。谢谢你的回答,对不起,我在SWIFT还是新手。你不应该把所有属性都设置为可选的,只有你真正确定的属性可以为零。@JoakimDanielson同意,这就是为什么我添加了这一点,因为我不知道答案。但由于存在空值,它们可能都是空值,也可能不是空值。谢谢你的回答,对不起,我在斯威夫特还是新来的