alibaba / HandyJSON

A handy swift json-object serialization/deserialization library
Other
4.23k stars 639 forks source link

mappingArray失败,求解惑 #190

Open jianmu297 opened 6 years ago

jianmu297 commented 6 years ago

尝试JsonString mapping modelArray 的时候失败,求解惑。。

testModel code(export from jsonData)

struct TestModel : HandyJSON{

    var result : Result?
    var success : String?

}

struct Result :  HandyJSON{

    var disline : String?
    var lists : List?
    var page : String?
    var totline : String?

}

struct List :  HandyJSON{

    var sh600000 : Sh600000?

}

struct Sh600000 :  HandyJSON{

    var buy1M : String?
    var buy1N : String?
}

defind func code (extension moya.response)

 public func mapArray<T: HandyJSON>(_ type: T.Type ,path:String) throws -> [T] {

        guard let ary = [T].deserialize(from: try mapString(), designatedPath:path) else {
            throw MoyaError.jsonMapping(self)
        }
        return ary.flatMap{ $0.flatMap { $0 }}
    }

call func code (by moya)

        TestApiProvider.request(.test) { Result in

            switch Result {
            case let .success(response):
                var model:[List] = [List]()
                do {

                    model = try response.mapArray(List.self, path: "result.lists")
                    print(model as Any)
                } catch {

                }
                break
            case .failure(_):
                break
            }
        }

结果是调用时总是[T].deserialize转换失败(mapJsonStr是成功),抛出异常。 对Swift和HandyJSON还不是很了解,是我的用法错了吗?

lynnAccount commented 6 years ago

我也有类似的问题, 换个接口居然就能成功