【问题标题】:How to parse the JSON in swift 3如何在 swift 3 中解析 JSON
【发布时间】:2016-11-20 13:32:23
【问题描述】:

我正在尝试解析从服务器响应中读取的 JSON。我能够获取第一级,但之后我可以遍历到下一个级别。由于我对 IOS 完全陌生,所以我尽可能多地探索和尝试,但一切都在脉络中。我怀疑缺少基本级别的东西。

let json = try JSONSerialization.jsonObject(with: data!, options: JSONSerialization.ReadingOptions.mutableContainers) as! NSDictionary

打印(json)

    {

"ab_report" = "[{\"label\":\"ART\",\"value\":187},{\"label\":\"SINDED\",\"value\":24},{\"label\":\"RES\",\"value\":1},{\"label\":\"REAL\",\"value\":1}]";

distslist =     (

            {

        "_id" =             {

            "$id" = 5732d884dbe782a63c760e3b;

        };

        "dt_code" = ADB;

        "dt_name" = Adilaasbad;

        "st_name" = 572d95c0dsdfbe7823348c981b3;

    },

            {

        "_id" =             {

            "$id" = 572d95d4dbsadfe7826b48c981b3;

        };

        "dt_code" = HEEWYD;

        "dt_name" = aassas;

        "st_name" = 572d95c0efghbe7823348dc981b3;

    }

)

"last_ssdate" = "Lase on : 2s0";

message = "";

"ressdfort" = "[{\"label\":\"Ded\",\"value\":71},{\"label\":\"Weed\",\"value\":0},{\"label\":\"Scrnitiated\",\"value\":0}]";

"scrort" = "[{\"label\":\"Physicals\",\"value\":8551},{\"label\":\"General\",\"value\":15752},{\"label\":\"Ees\",\"value\":2756}]";

}

打印(json[“ressdfort”]!)

[{"label":"Ded","value":71},{"label":"Weed","value":0},{"label":"Stiated","value":0}]

在此之后,我想用“标签”和“值”从每个对象中一一获取值。

提前致谢。

【问题讨论】:

  • json["ressdfort"]! 返回一个 Array 类型为 Dictionary '[Dictionary]` 的元素。谷歌如何处理这些类型。如果用 Swift 做东西,你可能想要阅读:developer.apple.com/library/content/documentation/Swift/…
  • @shallowThought 感谢您的建议,我浏览了该链接并获得了一些基本想法。当我打印print(type(of:json)) 时,它是__NSDictionaryItype(of:json["ressdfort"]!) 它是__NSCFStringtype(of:json["ressdfort"]!) 它是Optional<Any。我试图通过let sng = json["ressdfort"] as! NSArray 获得数组,但我得到'无法转换__NSCFString' (0x10e819320) to 'NSArray' (0x10e819c58). 类型的值,你能建议我如何进一步处理。谢谢!
  • 两个想法:在 Swift 中更喜欢Dictionary([String:Any] 或类似的东西)而不是NSDictionary。此外,您的 JSON 将 JSON 字符串作为 JSON 嵌入其中,因此对于 ressdfortscript ab_report 值,您必须再次调用 JSONSerialization

标签: ios json swift swift3 xcode8


【解决方案1】:

现在试试这个来获取“标签”值。将你的 jsonObj 传递给这个函数。希望它对你有用:)

 func parseJson(_ JsonDict: AnyObject)
    {

        if let dict = JsonDict["ressdfort"]  as? [AnyObject]{
            for dict1 in dict{
                if let textDist = (dict1 as? [String : AnyObject])?["label"]{
                    print("YOUR LABEL TEXT IS  \(String(describing: textDist))")

                }
            }

        }


    }

【讨论】:

    【解决方案2】:

    您可以使用 Alamofire 并按如下方式解析 json 响应:

    Alamofire.request(.POST, YOUR_URL, parameters: DIC_PARAMETERS, encoding: .URLEncodedInURL)
                .responseJSON { response in
                    guard response.result.error == nil else {
                        print(response.result.error!)
                        return
                    }
    
                    if let value = response.result.value {
                        print("Your Response is: " + value.description)
    
                        if((response.result.value) != nil) {
                            let swiftyJsonVar = response.result.value!
                            do {
                                if let dicObj = swiftyJsonVar as? NSDictionary {
                                   print("Response is dictionary")
                                    print(dicObj)
                                 let arrObj = dicObj["ab_report"] as NSArray
                                 let arrObj2 = dicObj["distslist"] as NSArray
                    // Then iterate your arrObj and do as per your requirment.
    
                                } else if let arrObj = swiftyJsonVar as? NSArray {
                                    print("Response is an array")
                                    print(arrObj)
    
                                } else {
                                    print("response is not valid JSON data")
                                }
                            }
                        }
                    }
            }
        }
    

    【讨论】:

      【解决方案3】:
      let bundle = json["ressdfort"] as! Array
      
      for eachObject in bundle
      {
          let label = (eachObject as! NSDictionary).valueForKey("label")! as! String
          let value =(eachObject as! NSDictionary).valueForKey("value")! as! String
          print(label) 
          print(value) 
      }
      

      【讨论】:

      • 很抱歉它没有工作,我收到Ambiguous reference to member 'subscript'
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-01
      • 1970-01-01
      • 2019-03-27
      相关资源
      最近更新 更多