Json 需要解码字典<;字符串,任意>;但是找到了一个数字
swift 5结果类型的JSON解析存在问题。下面是导致错误的代码 这是我的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){
[
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”
的字典,其值是一个数字数组。