在Swift中解析JSON时出现错误,并循环遍历数组。

12 浏览
0 Comments

在Swift中解析JSON时出现错误,并循环遍历数组。

我有一个返回JSON的API,我想解析这个JSON并在我的应用程序中使用它。

我尝试了这个链接中的get方法:swift JSON login REST with post and get response example

代码:

func makeGetCall() {

// 设置URL请求

let todoEndpoint: String = "我的链接"

guard let url = URL(string: todoEndpoint) else {

print("错误:无法创建URL")

return

}

let urlRequest = URLRequest(url: url)

// 设置会话

let config = URLSessionConfiguration.default

let session = URLSession(configuration: config)

// 发出请求

let task = session.dataTask(with: urlRequest) {

(data, response, error) in

// 检查错误

guard error == nil else {

print("错误:调用GET时出错 /public/api/services")

print(error!)

return

}

// 确保我们获取到数据

guard let responseData = data else {

print("错误:未接收到数据")

return

}

// 解析结果为JSON,因为API提供的就是JSON

do {

guard let todo = try JSONSerialization.jsonObject(with: responseData, options: [])

as? [String: Any] else {

print("错误:尝试将数据转换为JSON时出错")

return

}

// 现在我们有了todo

// 让我们打印一下来证明我们可以访问它

print("todo是:" + todo.description)

// todo对象是一个字典

// 所以我们可以使用"title"键来访问标题

// 检查是否有标题并打印出来

guard let todoTitle = todo["name"] as? String else {

print("无法从JSON中获取todo标题")

return

}

print("标题是:" + todoTitle)

} catch {

print("错误:尝试将数据转换为JSON时出错")

return

}

}

task.resume()

}

输出结果是:错误:尝试将数据转换为JSON时出错...

我的JSON是:

[

{

"id": 1,

"name": "服务1",

"description": "这是服务1的描述。这是服务1的描述。这是服务1的描述。",

"created_at": null,

"updated_at": null

},

{

"id": 2,

"name": "服务2",

"description": "这是服务2的描述。这是服务2的描述。这是服务2的描述。",

"created_at": null,

"updated_at": null

}

]

为什么我在解析JSON时出错?

还有,如何循环遍历数组并打印每个项目?

例如:

服务1的描述是:这是服务1的描述。这是服务1的描述。这是服务1的描述。

服务2的描述是:这是服务2的描述。这是服务2的描述。这是服务2的描述。

0
0 Comments

错误解析JSON和在数组中循环的问题出现的原因是,原始的JSON数据是一个数组对象,但在解析时没有正确处理为数组类型。解决方法是使用Decodable协议来处理JSON数据。

首先,我们可以使用JSONSerialization来解析JSON数据。但是,在解析之前,我们需要确保JSON数据是一个数组类型。如果不是数组类型,将会出现错误并返回。

解决方法是使用guard语句来检查JSON数据是否为数组类型,并将其转换为[[String: Any]]类型。然后,我们可以使用for循环遍历数组,并打印每个元素的名称。

然而,更推荐的方法是使用Decodable协议来处理JSON数据。我们可以在类外部声明一个结构体,并使用Decodable协议来定义结构体的属性。然后,我们可以使用JSONDecoder来解码JSON数据,并将其转换为结构体的数组类型。最后,我们可以使用for循环遍历数组,并打印每个元素的名称。

值得注意的是,guard语句中的responseData将永远不会执行else子句,因为在之前已经检查了error是否为nil。因此,可以将guard语句简化为let responseData = data

最后,问答中还涉及了关于如何通过POST请求发送数据并获取响应的问题。但是,由于问题描述不够明确,无法给出具体的示例。

总结起来,解决错误解析JSON和在数组中循环的问题的方法是使用Decodable协议来处理JSON数据。这种方法更为方便和高效。

0
0 Comments

在Swift中解析JSON时出现错误和在数组中循环的问题。

错误的原因是:在解析JSON时,你错误地假设你有一个名为todo的列表,但实际上解析将给你todoArray

解决方法是:在Swift4中,你可以使用JSONSerialization.jsonObject(with:options:)方法来解析JSON。首先,确保你有一个包含JSON字符串的Data对象。然后,将其转换为JSON对象,并将其强制转换为[[String: Any]]类型的数组。然后,可以通过循环遍历数组中的每个todo对象,并按照需要解析其属性。

下面是示例代码:

// 假设你有一个包含JSON字符串的Data对象

guard let data = data else {

return

}

// 将Data对象转换为JSON对象

let json = try? JSONSerialization.jsonObject(with: data, options: [])

// 检查JSON对象是否为[[String: Any]]类型的数组

if let array = json as? [[String: Any]] {

// 遍历数组中的每个todo对象

for todo in array {

// 解析todo对象的属性

if let name = todo["name"] as? String {

print("Name : \(name)")

}

// 根据需要以相同的方式解析其他属性

}

}

感谢你的帮助!

0