首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用Mantle - Swift解析JSON

用Mantle - Swift解析JSON
EN

Stack Overflow用户
提问于 2015-03-14 14:12:44
回答 1查看 6K关注 0票数 1

我正在使用mantle用Swift解析JSON数据。JSON文件的内容包括:

代码语言:javascript
复制
{
    "Name1": [
      {
        "Type": "New",
        "Available": true,
        "Kind": "4178228729",
        "Loot": "4367",
        "Advanced": [
          {
            "Type": "Old",
            "Name": "RoundRobin",
        "Available": true,
            "Specs": [
              {
                "Type": "Fire",
                "Available": true,

                "Actions": [


                --continues with similar pattern--
    ],
    "Name2": [
                --repeats the same pattern at before--
    ]
}

我创建了模型类,继承自MTLJSONSerializing。“第一级类”包含两个顶级对象数组。

代码语言:javascript
复制
import Foundation

class lv1Class: MTLJSONSerializing {
    let name1: Array<lv2Class> = []
    let name2: Array<lv2Class> = []


        class func name2JSONTransformer() -> NSValueTransformer {
        return NSValueTransformer.mtl_JSONArrayTransformerWithModelClass(lv2Class.self)
    }

        class func name1JSONTransformer() -> NSValueTransformer {
        return NSValueTransformer.mtl_JSONArrayTransformerWithModelClass(lv2Class.self)
    }

        override class func JSONKeyPathsByPropertyKey() -> [NSObject : AnyObject]!
    {
        return ["name1": "Name1",
            "name2": "Name2"]
    }
}

就像这样越来越深了。

代码语言:javascript
复制
import Foundation

class lv2Class: MTLJSONSerializing {
    let type: String = ""
    let available: Bool = true
    let kind: String = ""
    let loot: String = ""
    let advanced: Array<lv3Class> = []


        class func advancedJSONTransformer() -> NSValueTransformer {
        return NSValueTransformer.mtl_JSONArrayTransformerWithModelClass(lv3Class.self)
    }

        override class func JSONKeyPathsByPropertyKey() -> [NSObject : AnyObject]!
    {
        return ["type": "Type",
        "available": "Available",
        "kind": "Kind",
        "loot": "Loot",
        "advanced": "Advanced"]
    }
}

其他类在结构上是相似的。(如果有必要的话,我可以把它们全部张贴在文科上。)

获取JSON数据的调用如下所示:

代码语言:javascript
复制
  if let lv1ClassObject = MTLJSONAdapter.modelOfClass(lv1Class.self, fromJSONDictionary: testDic,  error: errorjson) as? lv1Class

testDic是上面发布的文件。

我成功地调用了json数据,我很有信心问题就在我的数据模型中。字典的值是一个数组,所以我非常自信地将它解析为一个数组。

我得到的错误是:

代码语言:javascript
复制
Assertion failure in -[MTLJSONAdapter initWithJSONDictionary:modelClass:error:], /Users/xx/Documents/Xcode/My_project/Pods/Mantle/Mantle/MTLJSONAdapter.m:149
2015-03-14 14:34:20.331 My_project[25794:711328] *** Caught exception available is not a property of My_project.lv2Class

但可用是属于这一类的..。

代码语言:javascript
复制
 let available: Bool = true

希望这是足够清楚,如果你有任何问题,请随便问。

我真的不熟悉解析JSON,谢谢大家的帮助。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-03-22 10:15:20

答案是这里

您需要将它们作为dynamic,并确保可以将所有属性桥接到等效的Obj属性。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29049892

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档