Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/99.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 将字典转换为数组?_Ios_Json_Swift - Fatal编程技术网

Ios 将字典转换为数组?

Ios 将字典转换为数组?,ios,json,swift,Ios,Json,Swift,我试图从swiftui中的json响应中访问一些数据 但是,我得到了这个错误: 应解码数组,但找到了字典。“,underyingError:nil 我知道这意味着我的代码在寻找数组,但json响应是字典 我发现: 但是,当我尝试从[SightingsL].self中删除[]时,我的代码不起作用,出现以下错误: 无法将类型“SightingsL”的值分配给类型“[SightingsL]” 下面是:self.sightingsL=decodedList 这是我的代码: Published var s

我试图从swiftui中的json响应中访问一些数据

但是,我得到了这个错误

应解码数组,但找到了字典。“,underyingError:nil

我知道这意味着我的代码在寻找数组,但json响应是字典

我发现:

但是,当我尝试从
[SightingsL].self中删除
[]
时,我的代码不起作用,出现以下错误:

无法将类型“SightingsL”的值分配给类型“[SightingsL]”

下面是:
self.sightingsL=decodedList

这是我的代码:

Published var sightingsL = [SightingsL]()


let url = URL(string: "https://xxxx")

var request = URLRequest(url: url!)
request.httpMethod = "GET"
request.addValue("my key", forHTTPHeaderField: "Authorization")
request.addValue("application/json", forHTTPHeaderField: "Content-Type")
        
URLSession.shared.dataTask(with: request) {(data,response,error) in
    do {
        if let d = data {
            let decodedLists = try JSONDecoder().decode([SightingsL].self, from: d)
            DispatchQueue.main.async { [self] in
                
                self.sightingsL = decodedLists

            }
        }else {
            print("No Data")
        }
    } catch {
        print (error)
    }
    
}.resume()
下面是JSON响应:

{
  "Count": 123,
  "myflies": [
    {
      "Id": 12345,
      "Username": "SOME USERNAME",
      "Images": [
        6666,
        8888
      ],
      "userID": 123456
    }
  ]
}
你需要

let res = try JSONDecoder().decode(Root.self, from: d)
DispatchQueue.main.async { 
  self.sightingsL = res.myflies
}

post json待接收移动方括号(
SightingsL.self
)并声明
Published var SightingsL:SightingsL?
@shu Khan,请查看我的编辑。@vadian,这将消除该错误,但会产生6个以上错误。是的,因为您的基本设计是错误的。根对象显然不是数组。
// MARK: - Root
struct Root: Codable {
    let count: Int
    let myflies: [SightingsL]

    enum CodingKeys: String, CodingKey {
        case count = "Count"
        case myflies
    }
}

// MARK: - SightingsL
struct SightingsL: Codable {
    let id: Int
    let username: String
    let images: [Int]
    let userID: Int

    enum CodingKeys: String, CodingKey {
        case id = "Id"
        case username = "Username"
        case images = "Images"
        case userID
    }
}