Json 需要解码字典<;字符串,任意>;但是找到了一个数字

Json 需要解码字典<;字符串,任意>;但是找到了一个数字,json,swift,api,decodable,Json,Swift,Api,Decodable,swift 5结果类型的JSON解析存在问题。下面是导致错误的代码 这是我的JSON数据示例 [ 9129911, 9129199, 9127761, 9128141, 9128264, 9127792, 9129248, 9127092, 9128367, 9038733 ] 这是我的垃圾代码 func fetchData(completion: @escaping (Result<[news],Error>) -> Void){

swift 5结果类型的JSON解析存在问题。下面是导致错误的代码

这是我的JSON数据示例

[
  9129911,
  9129199,
  9127761,
  9128141,
  9128264,
  9127792,
  9129248,
  9127092,
  9128367,
  9038733
]
这是我的垃圾代码

func fetchData(completion: @escaping (Result<[news],Error>) -> Void){
      guard let url = URL(string: base_URL) else { return }
      URLSession.shared.dataTask(with: url) { (data, _, error) in

        if let error = error {
          completion(.failure(error))
          return
        }

        guard let jsonData = data else { return }
        do {

          let info = try JSONDecoder().decode([news].self, from: jsonData)
          //let userId = info
          completion(.success(info))

        }catch let error {
          completion(.failure(error))
        }


        }.resume()
    }
我的用户代表

var users = [news]()
我的结构是->

struct news: Decodable {

  let id: [Int]

}

您的JSON是一个简单的整数数组,因此您应该像这样对其进行解码:

let info = try JSONDecoder().decode([Int].self, from: jsonData)
[
    {
        "id": [1,2,3]
    },
    {
        "id": [4,5,6]
    }
]
struct News {
    let id: Int
}
func fetchData(completion: @escaping (Result<[News],Error>) -> Void){
  guard let url = URL(string: base_URL) else { return }
  URLSession.shared.dataTask(with: url) { (data, _, error) in

    if let error = error {
      completion(.failure(error))
      return
    }

    guard let jsonData = data else { return }
    do {

      let arrayOfInts = try JSONDecoder().decode([Int].self, from: jsonData)
      let info = arrayOfInts.map(News.init)
      completion(.success(info))

    }catch let error {
      completion(.failure(error))
    }


    }.resume()
}
[news]
数组将对应如下JSON结构:

let info = try JSONDecoder().decode([Int].self, from: jsonData)
[
    {
        "id": [1,2,3]
    },
    {
        "id": [4,5,6]
    }
]
struct News {
    let id: Int
}
func fetchData(completion: @escaping (Result<[News],Error>) -> Void){
  guard let url = URL(string: base_URL) else { return }
  URLSession.shared.dataTask(with: url) { (data, _, error) in

    if let error = error {
      completion(.failure(error))
      return
    }

    guard let jsonData = data else { return }
    do {

      let arrayOfInts = try JSONDecoder().decode([Int].self, from: jsonData)
      let info = arrayOfInts.map(News.init)
      completion(.success(info))

    }catch let error {
      completion(.failure(error))
    }


    }.resume()
}
他们非常不同

我建议您将
news
struct更改为如下内容:

let info = try JSONDecoder().decode([Int].self, from: jsonData)
[
    {
        "id": [1,2,3]
    },
    {
        "id": [4,5,6]
    }
]
struct News {
    let id: Int
}
func fetchData(completion: @escaping (Result<[News],Error>) -> Void){
  guard let url = URL(string: base_URL) else { return }
  URLSession.shared.dataTask(with: url) { (data, _, error) in

    if let error = error {
      completion(.failure(error))
      return
    }

    guard let jsonData = data else { return }
    do {

      let arrayOfInts = try JSONDecoder().decode([Int].self, from: jsonData)
      let info = arrayOfInts.map(News.init)
      completion(.success(info))

    }catch let error {
      completion(.failure(error))
    }


    }.resume()
}
然后在解码后,您可以将解码后的数据转换为如下所示的
[News]

let info = try JSONDecoder().decode([Int].self, from: jsonData)
[
    {
        "id": [1,2,3]
    },
    {
        "id": [4,5,6]
    }
]
struct News {
    let id: Int
}
func fetchData(completion: @escaping (Result<[News],Error>) -> Void){
  guard let url = URL(string: base_URL) else { return }
  URLSession.shared.dataTask(with: url) { (data, _, error) in

    if let error = error {
      completion(.failure(error))
      return
    }

    guard let jsonData = data else { return }
    do {

      let arrayOfInts = try JSONDecoder().decode([Int].self, from: jsonData)
      let info = arrayOfInts.map(News.init)
      completion(.success(info))

    }catch let error {
      completion(.failure(error))
    }


    }.resume()
}
func fetchData(完成:@escaping(Result)->Void){
guard let url=url(字符串:base_url)else{return}
URLSession.shared.dataTask(带:url){(数据,\错误)在
如果let error=error{
完成(.failure(error))
返回
}
guard let jsonData=data else{return}
做{
让arrayOfInts=try JSONDecoder().decode([Int].self,from:jsonData)
let info=arrayOfInts.map(News.init)
完成(.success(info))
}捕捉错误{
完成(.failure(error))
}
}1.简历()
}

您的JSON是一个简单的整数数组,因此您应该像这样对其进行解码:

let info = try JSONDecoder().decode([Int].self, from: jsonData)
[
    {
        "id": [1,2,3]
    },
    {
        "id": [4,5,6]
    }
]
struct News {
    let id: Int
}
func fetchData(completion: @escaping (Result<[News],Error>) -> Void){
  guard let url = URL(string: base_URL) else { return }
  URLSession.shared.dataTask(with: url) { (data, _, error) in

    if let error = error {
      completion(.failure(error))
      return
    }

    guard let jsonData = data else { return }
    do {

      let arrayOfInts = try JSONDecoder().decode([Int].self, from: jsonData)
      let info = arrayOfInts.map(News.init)
      completion(.success(info))

    }catch let error {
      completion(.failure(error))
    }


    }.resume()
}
[news]
数组将对应如下JSON结构:

let info = try JSONDecoder().decode([Int].self, from: jsonData)
[
    {
        "id": [1,2,3]
    },
    {
        "id": [4,5,6]
    }
]
struct News {
    let id: Int
}
func fetchData(completion: @escaping (Result<[News],Error>) -> Void){
  guard let url = URL(string: base_URL) else { return }
  URLSession.shared.dataTask(with: url) { (data, _, error) in

    if let error = error {
      completion(.failure(error))
      return
    }

    guard let jsonData = data else { return }
    do {

      let arrayOfInts = try JSONDecoder().decode([Int].self, from: jsonData)
      let info = arrayOfInts.map(News.init)
      completion(.success(info))

    }catch let error {
      completion(.failure(error))
    }


    }.resume()
}
他们非常不同

我建议您将
news
struct更改为如下内容:

let info = try JSONDecoder().decode([Int].self, from: jsonData)
[
    {
        "id": [1,2,3]
    },
    {
        "id": [4,5,6]
    }
]
struct News {
    let id: Int
}
func fetchData(completion: @escaping (Result<[News],Error>) -> Void){
  guard let url = URL(string: base_URL) else { return }
  URLSession.shared.dataTask(with: url) { (data, _, error) in

    if let error = error {
      completion(.failure(error))
      return
    }

    guard let jsonData = data else { return }
    do {

      let arrayOfInts = try JSONDecoder().decode([Int].self, from: jsonData)
      let info = arrayOfInts.map(News.init)
      completion(.success(info))

    }catch let error {
      completion(.failure(error))
    }


    }.resume()
}
然后在解码后,您可以将解码后的数据转换为如下所示的
[News]

let info = try JSONDecoder().decode([Int].self, from: jsonData)
[
    {
        "id": [1,2,3]
    },
    {
        "id": [4,5,6]
    }
]
struct News {
    let id: Int
}
func fetchData(completion: @escaping (Result<[News],Error>) -> Void){
  guard let url = URL(string: base_URL) else { return }
  URLSession.shared.dataTask(with: url) { (data, _, error) in

    if let error = error {
      completion(.failure(error))
      return
    }

    guard let jsonData = data else { return }
    do {

      let arrayOfInts = try JSONDecoder().decode([Int].self, from: jsonData)
      let info = arrayOfInts.map(News.init)
      completion(.success(info))

    }catch let error {
      completion(.failure(error))
    }


    }.resume()
}
func fetchData(完成:@escaping(Result)->Void){
guard let url=url(字符串:base_url)else{return}
URLSession.shared.dataTask(带:url){(数据,\错误)在
如果let error=error{
完成(.failure(error))
返回
}
guard let jsonData=data else{return}
做{
让arrayOfInts=try JSONDecoder().decode([Int].self,from:jsonData)
let info=arrayOfInts.map(News.init)
完成(.success(info))
}捕捉错误{
完成(.failure(error))
}
}1.简历()
}

您的JSON是一个简单的旧数字数组。但是您的代码希望它是一个具有键
“id”
的字典,其值是一个数字数组。您的JSON是一个普通的旧数字数组。但是您的代码希望它是一个具有键
“id”
的字典,其值是一个数字数组。