在此方案中使用ObjectMapper
[{
"port": "1",
"b": [{
"c": [{"address": 1}]
}]
}, {
"port": "2",
"b": [{
"c": [{"address": 2}]
}]
}]
这里C是具有行地址和端口的实体。现在使用ObjectMapper如何设置端口实体C的值。
我已经编写了这个嵌套的代码部分
class a: NSManagedObject, Mappable {
@NSManaged var port: NSNumber?
@NSManaged var b: NSSet?
private var barr: [b]?
required public init?(map: Map) {
let ctx = DbHelper .getContext()
let entity = NSEntityDescription.entity(forEntityName: "a", in: ctx)
super.init(entity: entity!, insertInto: ctx)
mapping(map: map)
}
public func mapping(map: Map) {
port <- map["port"]
barr <- map["b"]
if barr != nil
{
b = NSSet(array: barr!)
barr = nil
}
}
}
同样为“B”和“C”实体创建和映射
现在在“C”我需要来自实体“a”的“port”值。
答案 0 :(得分:1)
首先,你的json无效。您在端口后忘记了"
:"port: "2",
这里的解决方案
模型结构:
class Port : Mappable {
var port:String?
var b: [C]?
required init?(map: Map) {
}
func mapping(map: Map) {
port <- map["port"]
b <- map["b"]
}
}
class C : Mappable {
var c:[Address]?
required init?(map: Map) {
}
func mapping(map: Map) {
c <- map["c"]
}
}
class Address : Mappable {
var address:Int?
required init?(map: Map) {
}
func mapping(map: Map) {
address <- map["address"]
}
}
这样称呼:
if let json = "yourJson" {
if let res:[Port] = Mapper<Port>().mapArray(JSONArray: json as! [[String : Any]]) {
//your port objects
}
}
注意:我做了一个强制演员。你不应该。 Objectmapper需要[[String : Any]]
的{{1}}格式。
我建议使用Alamofire进行请求。
使用Alamofire可以:
json
如果您在项目的开头,则应使用 let url = "https://api.myjson.com/bins/iw6vj" //your json
Alamofire.request(url).responseJSON { (data) in
if let json = data.result.value {
if let res:[Port] = Mapper<Port>().mapArray(JSONArray: json as! [[String : Any]]) {
//your port objects
}
}
}
https://developer.apple.com/documentation/swift/codable。网上有很多教程。搜索Alamofire + Codable,您可以非常轻松地处理请求+解析。
提示:您的命名非常混乱。查看这篇文章https://medium.com/coding-skills/clean-code-101-meaningful-names-and-functions-bf450456d90c这也有助于模型结构。