【问题标题】:how to parse following JSON using object mapper如何使用对象映射器解析以下 JSON
【发布时间】:2016-02-25 04:25:34
【问题描述】:

这是 JSON

[{ "start_hour": "08:00:00", "end_hour": "10:00:00", “通话时间”:“30” }]

我尝试解析如下

class DoctorAvailablityResponseData: Mappable {
var startDateHour : String?
var callDuration : Int?
var endDateHour : String?
required init?(_ map: Map){

}

func mapping(map: Map) {
    callDuration <- map["call_duration"]
    endDateHour <- map["end_hour"]
    startDateHour <- map["start_hour"]

  }
}

let user = Mapper<ResponseDoctorAvailablity>().map(response.result.value)

但在解析时中断,发现 nil 值。

【问题讨论】:

    标签: ios swift objectmapper


    【解决方案1】:

    您的数据类型错误。您需要提供“DoctorAvailablityResponseData”,但您提供了 ResponseDoctorAvailablity 用于映射。

        let user = Mapper<ResponseDoctorAvailablity>().map(response.result.value)
    

    例子

        class Doctor: Mappable {
            var startDateHour : String?
            var callDuration : String?
            var endDateHour : String?
            required init?(_ map: Map){
    
            }
    
            func mapping(map: Map) {
                callDuration <- map["call_duration"]
                endDateHour <- map["end_hour"]
                startDateHour <- map["start_hour"]
    
            }
        }
    
        // Sample Response
        let response : NSMutableDictionary = NSMutableDictionary.init(object: "08:00:00", forKey: "start_hour");
        response.setValue("10:00:00", forKey: "end_hour");
        response.setValue("30", forKey: "call_duration");
    
        // Convert response result to dictionary type. It is very easy.
        let userdic = Mapper<Doctor>().map(response) // Map to correct datatype.
        NSLog((userdic?.callDuration)!);
    
        // If you result is nested object. you will easily get zero index position object and parse it.
        let nestedObjectArray :NSArray = NSArray.init(array: [response]);
    
        let userArray = Mapper<Doctor>().map(nestedObjectArray[0])
    
    
        NSLog((userArray?.callDuration)!);
    

    【讨论】:

    • 是的,这段代码可以工作,但我不想为此制作字典,json有什么问题吗?
    • 我也可以这样做让 user = Mapper().map(response.result.value?.objectAtIndex(0))
    • 能否给出response.result.value?
    • 我以为,你的响应结果是嵌套对象。
    • 可能你的解决方案是,让 user = Mapper().map(response.result.value[0])
    【解决方案2】:

    根据用户 JSON 'call_duration' 也是字符串类型。换行

    var callDuration : Int?
    

    到:

    var callDuration : String?
    

    【讨论】:

      【解决方案3】:

      你也可以将它们全部包装在一个“守卫”语句中,如果你得到一个 nil,你可以传入 0 来表示一个项目是空的或没有长度。

      【讨论】:

      • 问题不在于 nil,问题在于解析方式,我可以使用 nsjsonserialization 解析
      【解决方案4】:

      您的 json 数据看起来像一个数组,其中第一个元素是字典。

      [{ "start_hour": "08:00:00", "end_hour": "10:00:00", "call_duration": "30" }]

      除了把call_duration类型改成String?您是否尝试过确保您实际上将字典而不是数组传递给 map 函数?尝试只传递这个,看看它是否有效。

      { "start_hour": "08:00:00", "end_hour": "10:00:00", "call_duration": "30" }

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-03-18
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多