在SwiftUI中,你可以使用URLSession来从URL中读取JSON数据并将其输出到应用程序屏幕。下面是一个完整的示例代码:
import SwiftUI
struct ContentView: View {
@State private var jsonData = ""
var body: some View {
VStack {
Text(jsonData)
.padding()
Button("Load JSON") {
fetchJSON(from: "https://example.com/data.json")
}
.padding()
}
}
func fetchJSON(from urlString: String) {
guard let url = URL(string: urlString) else {
print("Invalid URL")
return
}
URLSession.shared.dataTask(with: url) { (data, response, error) in
if let error = error {
print("Error: \(error.localizedDescription)")
return
}
guard let data = data else {
print("No data received")
return
}
do {
let json = try JSONSerialization.jsonObject(with: data, options: [])
let jsonData = try JSONSerialization.data(withJSONObject: json, options: .prettyPrinted)
let jsonString = String(data: jsonData, encoding: .utf8)
DispatchQueue.main.async {
self.jsonData = jsonString ?? ""
}
} catch {
print("Error parsing JSON: \(error.localizedDescription)")
}
}.resume()
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}
在上面的代码中,我们首先创建了一个名为jsonData
的状态变量,用于存储从URL中读取的JSON数据。然后,我们在视图的正文中显示了这个jsonData
变量的内容,并创建了一个按钮来触发加载JSON数据的操作。
当用户点击按钮时,fetchJSON(from:)
函数会被调用。在这个函数中,我们首先将传入的URL字符串转换为URL对象。然后,我们使用URLSession.shared.dataTask(with:completionHandler:)
方法来发起一个网络请求,并在请求完成后处理返回的数据。
在请求完成后,我们首先检查是否有错误发生。如果有错误,我们将其打印出来并返回。否则,我们将接收到的数据转换为JSON对象,并将其重新转换为格式化的JSON字符串。最后,我们使用DispatchQueue.main.async
将这个字符串更新到jsonData
变量中,以便在应用程序屏幕上显示出来。
请注意,这只是一个简单的示例,用于演示如何从URL中读取JSON数据并将其输出到应用程序屏幕。在实际应用中,你可能需要处理更多的错误情况,并根据需要进行适当的数据解析和处理。
领取专属 10元无门槛券
手把手带您无忧上云