简体   繁体   English

如何从 Swift3 中的 JSON 数组中获取值

[英]How to get value from JSON array in Swift3

I'm new in Swift3 and I'm confused how to get value from this JSON array.我是 Swift3 的新手,我很困惑如何从这个 JSON 数组中获取值。

This is my coding:这是我的编码:

let url = URL(string: apiServer)
URLSession.shared.dataTask(with: url!) {(data, response, error) in
    if error != nil {
       return
    }else{
        do {
            let json = try JSONSerialization.jsonObject(with: data!, options: []) as? [String: Any]

            if let allEntry = json?[“allentry"] as? [NSArray] {
                 print("All Entry: \(allEntry)")
             }
        }catch{
            print(error.localizedDescription)
        }
    }
}.resume()

This is JSON:这是 JSON:

"allentry": [
              [
                "Month",
                "Entry"
              ],
              [
                "Jan",
                109.52380952380953
              ],
              [
                "Feb",
                105.26315789473684
              ],
              [
                "Mar",
                104.54545454545455
              ],
              [
                "Apr",
                100
              ],
              [
                "May",
                105
              ],
              [
                "Jun",
                106.66666666666667
              ],
              [
                "Jul",
                100
              ],
              [
                "Aug",
                100
              ],
              [
                "Sep",
                100
              ],
              [
                "Oct",
                72.727272727272734
              ],
              [
                "Nov",
                0
              ],
              [
                "Dec",
                0
              ]
            ]

The output I got was this:我得到的输出是这样的:

All Entry:所有条目:

[<__NSArrayI 0x170029e60>( Month, Entry ) , <__NSArrayI 0x17002a0a0>( Jan, 109.5238095238095 ) , <__NSArrayI 0x170029fc0>( Feb, 105.2631578947368 ) , <__NSArrayI 0x17002a100>( Mar, 104.5454545454545 ) , <__NSArrayI 0x17002a2e0>( Apr, 100 ) , <__NSArrayI 0x17002a3a0>( May, 105 ) , <__NSArrayI 0x17002a740>( Jun, 106.6666666666667 ) , <__NSArrayI 0x17002a920>( Jul, 100 ) , <__NSArrayI 0x17002a860>( Aug, 100 ) , <__NSArrayI 0x17002ade0>( Sep, 100 ) , <__NSArrayI 0x17002a8c0>( Oct, 72.72727272727273 ) , <__NSArrayI 0x17002a980>( Nov, 0 ) , <__NSArrayI 0x17002a9e0>( Dec, 0 ) ] [<__ NSArrayI 0x170029e60>(月,条目),<__ NSArrayI 0x17002a0a0>(一月,109.5238095238095),<__ NSArrayI 0x170029fc0>(2月,105.2631578947368),<__ NSArrayI 0x17002a100>(三月,104.5454545454545),<__ NSArrayI 0x17002a2e0>(4月,100) ,<__ NSArrayI 0x17002a3a0>(5月,105),<__ NSArrayI 0x17002a740>(君,106.6666666666667),<__ NSArrayI 0x17002a920>(月,100),<__ NSArrayI 0x17002a860>(八月,100),<__ NSArrayI 0x17002ade0>(九月,100) , <__NSArrayI 0x17002a8c0>( Oct, 72.72727272727273 ) , <__NSArrayI 0x17002a980>( Nov, 0 ) , <__NSArrayI 0x17002a9e0>( Dec, 0 )

The JSON is an array of arrays, when you are printing it in the console, the console is printing the arrays inside the surrounding array. JSON 是一个数组数组,当您在控制台中打印它时,控制台正在打印周围数组中的数组。

As to how can you access the individual arrays and the values in them, you can use loops like this:至于如何访问单个数组及其中的值,您可以使用这样的循环:

var months = [Any]()
var values = [Any]()
for entry in allEntry {
    months.append(entry[0])
    values.append(entry[1])
}

This is a solution which maps the nested JSON arrays into a custom struct.这是一个将嵌套的 JSON 数组映射到自定义结构的解决方案。
The first entry with the field names is being dropped.带有字段名称的第一个条目将被删除。

struct Entry {
    let month : String
    let entry : Double
}

let url = URL(string: apiServer)
URLSession.shared.dataTask(with: url!) { (data, response, error) in
    if error != nil {
        print(error!)
        return
    } else {
        do {
            if let json = try JSONSerialization.jsonObject(with: data!) as? [String:Any],
                let entries = json["allentry"] as? [[Any]] {
                let items = entries.dropFirst().map{ Entry(month: $0[0] as! String, entry: $0[1] as! Double) }
                print(items)
            }
        } catch {
            print(error.localizedDescription)
        }
    }
}.resume()

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM