如何使用 swiftJson 和 Alamofire 解析 json 数据

2023-12-08

我的 Json 数据样本。这只是数据的示例。同样,可用的数据很多,例如子类别的数量为 22。项目数量根据子类别而不同。行数也是 15,其中第一个名称是 Pizza。

[
 {
  "id": "244",
  "name": "PIZZAS",
  "image": "",
  "coupon": "1",
  "icon": "",
  "order": "1",
  "aname": "",
  "options": "2",
  "subcategory": [
              {
                "id": "515",
                "name": "MARGARITA",
                "description": "Cheese and Tomato",
                "image": "",
                "icon": "",
                "coupon": "1",
                "order": "1",
                "aname": "",
                "options": "2",
                "item": [
                            {
                               "id": "1749",
                               "name": "9 Inch Thin & Crispy Margarita",
                               "description": "",
                               "price": "3.40",
                               "coupon": "1",
                               "image": "",
                               "options": "2",
                               "order": "1",
                               "addon": "495",
                               "aname": "",
                               "icon": ""
                        }]
          }]
  }]

enter image description here enter image description here

我想将所有名称、所有子类别名称、所有项目名称和所有项目描述提取到特定数组中,以便我可以特别填充到不同的表视图中

func ParseJSON(){
     var MenuList = [Menu]()

    Alamofire.request(.GET, myUrl)
        .validate()
        .responseJSON { response in
            switch response.result
            {
            case .Success:
                if let value = response.result.value {
                    let json = JSON(value)
                     print("JSON: \(json)")
                      for entity in json{
                        print(entity)
                       MenuList.append(entity["name"])  ///error
                    }

                }
            case .Failure(let error):
                print(error)
            }
    }

}

我可以使用 Alamofire 获取响应。现在如何使用 swiftJson 来实现它?

Updated

我添加了主类别、子类别和项目的类模型。

    import UIKit
    class Menu {
                 var id: Int?
                 var name: String?
                 var image: UIImage?
                 var coupon: Int?
                 var icon: UIImage?
                 var order: Int?
                 var aname: Int?
                 var options: Int?

init(id:Int,name:String,image:UIImage,coupon:Int,icon:UIImage,order:Int,aname:Int,options:Int){
        self.id = id
        self.name = name
        self.image = image
        self.coupon = coupon
        self.icon = icon
        self.order = order
        self.aname = aname
        self.options = options


    }
   }

如何将数据传递给类并获取值


Your json已经是一个 SwiftyJSON 对象。

这些对象始终具有索引键和内容键。

所以要循环你需要的 jsonfor (_, entity) in json代替for entity in json.

The _部分是我们忽略的索引。我们还可以做for (index, entity) in json如果我们想使用索引。

您还需要使用 SwiftyJSON 的类型属性,例如.string(可选)或.stringValue(非可选)。

在您的模型类中,属性类型必须反映您获得的属性类型。

填充数组Menu来自 JSON 第一层的对象,您可以像这样调整您的模型:

class Menu {
    var id: Int?
    var name: String?
    var image: String?
    var coupon: Int?
    var icon: String?
    var order: Int?
    var aname: String?
    var options: Int?

    init(id: Int?, name: String?, image: String?, coupon: Int?, icon: String?, order: Int?, aname: String?, options: Int?) {
        self.id = id
        self.name = name
        self.image = image
        self.coupon = coupon
        self.icon = icon
        self.order = order
        self.aname = aname
        self.options = options
    }
}

然后从 JSON 填充一个数组:

var menus = [Menu]()

for (_, content) in json {
    let menu = Menu(id: Int(content["id"].stringValue),
                    name: content["name"].string,
                    image: content["image"].string,
                    coupon: content["coupon"].int,
                    icon: content["icon"].string,
                    order: Int(content["order"].stringValue),
                    aname: content["name"].string,
                    options: Int(content["options"].stringValue))
    menus.append(menu)
}

现在您可以根据需要迭代对象:

for menu in menus {
    print(menu.name)
    print(menu.id)
}

Prints:

可选(“披萨”)
可选(244)

现在,如果您还想使用每个对象的“子类别”中的数据,则必须创建反映这些属性的其他模型类,例如“SubCategory”类和“Item”类(它们也可以存储在每个对象中)例如菜单)。您使用与我的示例相同的系统来填充它们 - 您只需适应每种格式,但既然您有了这个工作示例,那么到达那里应该相当简单。诀窍是充分理解 JSON 结构,以便可以将其反映在模型对象中。主要关注这一点,其余的就会随之而来。 :)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 swiftJson 和 Alamofire 解析 json 数据 的相关文章

随机推荐

  • Django Rest Framework 可写嵌套序列化器

    我正在编写一个食谱组织器作为课程的示例项目 除了使用一些非常基本的功能之外 我对 DRF 没有太多经验 这是目标 使用相关成分创建一个新食谱 在创建 Recipe 对象的同时创建 Ingredient 对象 模型 py class Ingr
  • JQuery - 禁用滚轮直到动画完成

    我试图在鼠标滚轮事件上禁用鼠标滚轮 并仅在操作完成后才启用它 window on DOMMouseScroll mousewheel function event disable mousewhell until the following
  • Codeigniter - 如何在视图中包含动态 javascript 文件

    如果满足某些条件 我尝试在标题视图中包含以下代码块 其中包含一些动态值
  • 如何运行大内存的dart程序?

    我试图在 dart 程序中读取一个非常大的文件 超过 1G 但它抛出内存不足异常 如何配置命令行以使其以更大的内存运行 就像 Xmx1G in Java VM 有一个增加堆大小的标志 old gen heap size 例如 old gen
  • Objective-C 自动释放池不释放对象

    我对 Objective C 很陌生 正在阅读内存管理 我试图用 NSAutoreleasePool 玩一下 但不知何故它不会释放我的对象 我有一个带有 setter 和 getter 的类 它基本上设置一个 NSString name 释
  • Prolog 列表合并问题?

    如何合并这样的两个列表 a b c 1 2 3 我想列出这个清单 a 1 b 2 c 3 我怎样才能做到这一点 我使用 swi prolog Thanks for your answers I have a question about i
  • 成功接收几个小时后,UART 接收中断停止触发

    我正在使用与 xbee 连接的 STM32f4 发现板来接收来自远程温度传感器的温度数据 使用的代码是 CMIS UART 示例代码 我将接收数据包数据 一次 1 个字节 换句话说 每当接收到每个字节时 就会调用 UART 接收中断 一旦我
  • 如何使用 Git 检索与 TFS 2013 中的构建相关的变更集?

    一旦你有了 IBuildDetail 来获取关联的变更集 就可以通过以下方式完成 buildDetail Information GetNodesByType AssociatedChangeset 但是 在带有 Git 的 TFS 201
  • 如何在 ASP.NET Core 7 中以 JSON 形式返回纯字符串

    在从 net 框架迁移的过程中 正在努力解决响应序列化的差异 这里的所有内容似乎都表明默认情况下响应将通过 json 序列化器发出 https learn microsoft com en us aspnet core web api ad
  • 确保任务是可中断的

    如何确保我的任务能够响应呼叫时的中断Future cancel ExecutorService executor Executors newSingleThreadExecutor Future
  • 具有项目依赖性的 Eclipse RCP

    我开发了一个 RCP 插件 不是独立的 以及一个带有插件需要调用的库代码的 Java 项目 我已在同一工作区中配置了 Java 项目 该插件对 Java 项目具有项目依赖性 代码编译 插件使用 Java 项目 库代码执行一些操作 当我运行该
  • laravel 5 csrf_token 值为空

    为什么 laravel 5 csrf token 值总是为空 我怎样才能获得该代币价值 I tried csrf token csrf token and Form open Form close 我的输出
  • 开放层 3:如何为修改交互创建侦听器

    我已经成功设置了修改交互 ol interaction Modify 的文档 http ol3js org en master apidoc ol interaction Modify html 不要提及修改功能时触发的单个事件 与 ol
  • 未找到属性:Spring 的图块中出现 NoSuchAttributeException

    我搜索了该网站上提出的所有问题并尝试了所有更改 但没有成功 所以在这里发布查询 我收到以下异常 HTTP Status 500 org apache tiles template NoSuchAttributeException Attri
  • Access ODBC 驱动程序中的无效日期时间格式异常

    我有一些从 ODBC 驱动程序读取的 NET 代码 该驱动程序是根据 DSN 字符串 带有用户名和密码 选择的 该驱动程序从表中读取多个字段 其中一个字段是日期时间字段 该代码 100 可以与 SQL Server 数据库 ODBC 驱动程
  • 命令 `brew install watchman` 运行 `chmod` 但最终安装失败

    brew install HEAD watchman gt Cloning https github com facebook watchman git Updating Library Caches Homebrew watchman g
  • 缓慢改变颜色,Java Graphics

    我有一个渐变背景 我希望它慢慢地改变颜色 基本上是让它经历不同的颜色 颜色必须混合所有颜色 我不希望它闪过颜色 这可能吗 请赐教 给我一个解决方案 谢谢 还考虑java awt image MemoryImageSource and a j
  • 有没有允许构建跨浏览器兼容的 html 和 css 代码的程序或框架?

    我知道有像 Dreamweaver 这样的程序 但在创建自动跨浏览器兼容的 html 和 css 代码方面 它们都没有取得重大成功 我想知道 是否有一个框架或程序可以用来创建更多跨浏览器兼容的 HTML 和 CSS 布局 目前 我正在使用在
  • 通过 Java Stream API 将 CSV 直接加载到对象 集合中

    是否可以通过流 API 来完成 将员工列表直接放入 CSV 的列表集合中 tl dr 使用 CSV 实用程序 例如Apache 共享 CSV 每一行传入数据都可以传递给您编写的解析方法 并得到结果Employee对象收集到List Iter
  • 如何使用 swiftJson 和 Alamofire 解析 json 数据

    我的 Json 数据样本 这只是数据的示例 同样 可用的数据很多 例如子类别的数量为 22 项目数量根据子类别而不同 行数也是 15 其中第一个名称是 Pizza id 244 name PIZZAS image coupon 1 icon