【问题标题】:Can't parse JSON in Swift无法在 Swift 中解析 JSON
【发布时间】:2019-11-11 05:58:46
【问题描述】:

我正在尝试测试这段代码以确保正确解析 JSON,但我遇到的问题是 URLSession 代码块内的任何内容都没有被执行。当我运行程序时,我得到的只是外面的“test2”打印语句。如果有人能帮助我指出正确的方向,将不胜感激,谢谢!

import Foundation

struct BMIInfo: Codable {
   let bmi: Double
   let more: [String]
   let risk: String
}

let url = "http://webstrar99.fulton.asu.edu/page3/Service1.svc/calculateBMI?height=60&weight=156"
let urlObj = URL(string: url)
URLSession.shared.dataTask(with: urlObj!) { (data, response, error) in

   let dataAsString = String(data: data!, encoding: .utf8)
   let decoder = JSONDecoder()
   let jsonresult = try! decoder.decode(BMIInfo.self, from: data!)

   let bmi = jsonresult.bmi
   let more = jsonresult.more
   let risk = jsonresult.risk

   print(bmi)
   print(dataAsString)
   print("test")

}.resume()
print("test2")

【问题讨论】:

  • 是控制台应用吗?您的应用程序很可能会在请求完成之前退出。
  • 该代码应该可以工作。在 Playground 中,您可能必须添加行 import PlaygroundSupportPlaygroundPage.current.needsIndefiniteExecution = true。请注意,打印顺序始终首先是"test2",然后是"test"
  • 您好 Stefan,我没有发现您的代码有任何问题。因此,我在一个新的操场上按原样复制了您的代码。它刚刚奏效。我得到以下输出:test2 30.463333333333335 Optional("{\"bmi\":30.463333333333335,\"more\":[\"https:\\/\\/www.cdc.gov\\/healthyweight\\/assessing\\/bmi\\/index.html\",\"https:\\/\\/www.nhlbi.nih.gov\\/health\\/educational\\/lose_wt\\/index.htm\",\"https:\\/\\/www.ucsfhealth.org\\/education\\/body_mass_index_tool\\/\"],\"risk\":\"You are obese :(\"}") test 我正在使用 Xcode 10.2.1。你在用什么?

标签: json swift


【解决方案1】:

您还有其他错误吗?我把你的代码放在操场上,所有的打印语句都有效。我为bmi 得到了 30.463333333333335,我什至为risk 添加了一个打印语句并成功地得到了它。 “test2”确实在其他任何一个之前先打印。您是否还有其他可能导致URLSession 无法完成的事情?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-03-10
    • 2018-03-23
    • 2015-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多