【问题标题】:How to map a json that I don't know the number of the parameters如何映射一个我不知道参数个数的json
【发布时间】:2018-04-10 06:34:40
【问题描述】:

您好,我有一个 json,它会将一些参数作为变量返回给我。 它有Parameter1,Parameter2,Parameter3等。 我不知道它会给我多少参数。这不是一个列表,它只是 json 中的不同变量。

映射这样的 json 的最佳方法是什么?我使用对象映射器

例如:

第一次json是

 {
  "MyObject": {
    "Parameter1": "p1",
    "Parameter2": "p2",
    "Parameter3": "p3",
    "Parameter4": "p4"
  }
}

第二次 json 是

{
  "MyObject": {
    "Parameter1": "p1",
    "Parameter2": "p2",
    "Parameter3": "p3"
  }
}

【问题讨论】:

  • 你能分享一下它的 JSON 样本吗?
  • 我编辑了检查,谢谢@AbhirajsinhThakore
  • 您的应用如何知道要访问哪些属性?它是已知名称的固定列表吗?
  • 我不知道我会尝试映射固定数量的属性,例如前五个 Parameter1,Parameter 2... 如果还有更多,他们的问题。但我想知道是否有办法通过使用类似 map["Parameter*"] 来映射这些属性
  • 你可以将 json 转换为字典并遍历键和值

标签: ios json swift object mapper


【解决方案1】:

你可以试试这个。

let keyvalue = parentDict.value(forKey: "MyObject") as! NSDictionary
                var lastValue = Keyvalue.allValues
                var lastKey = Keyvalue.allKeys

                for Keyname in Keyvalue.allKeys
                {
                    print("Keyname %@",Keyname)
                    print("Value %@",Keyvalue.value(forKey:Keyname))
                }

【讨论】:

    【解决方案2】:

    解析任何 JSON 以使其可重用的第一步是相应地创建模型类或结构。

    1. 创建一个名为 MyObject 的类,与您的 json 字典相同
    2. 创建一个 let/var 属性parameters: [String]?。它是可选的,因为 API 不可靠,可能根本不会发送任何内容。
    3. 请参阅下面的示例,我如何解析下面的 json 对象。

      class MyObject {
         let parameters: [String]?
      
         // it's failable because maybe json different at runtime & couldn't parse
         init?(json: [String:AnyObject]) {
            var key = "Parameter"
            var parms = [String]()
            for i in 0..<json.count {
               guard let item = json["\(key)\(i+1)"] as? String else { continue }
               params.append(item)
            }
            self.parameters = params
         }
      
      }
      

    现在您可以使用索引访问参数数组了。

    好吧,这可以重构,您可以了解如何使用该库处理此问题。

    【讨论】:

      猜你喜欢
      • 2020-11-11
      • 1970-01-01
      • 1970-01-01
      • 2014-03-12
      • 2021-06-30
      • 2019-11-26
      • 1970-01-01
      • 1970-01-01
      • 2011-06-17
      相关资源
      最近更新 更多