繁体   English   中英

如何在Swift中显示已解析的JSON数据?

[英]How to display parsed JSON data in Swift?

在通过API调用解析JSON之后,我无法将解析的JSON转换为我想在ViewController中显示的数据。 我可以在控制台中打印JSON数据,但我不能仅从要显示的数据中获取“ word:..”的值。 这是一个JSON对象的示例:

{
  "metadata": {},
  "results": [
    {
      "id": "eurhythmic",
      "word": "eurhythmic"
    }
  ]
}

我正在使用的结构如下:

// Struct RandomWords
struct StoreRandomWords: Codable {
    let results: [Result]
}

struct Result: Codable {
    let word: String
}

从API提取数据的代码:

func fetchRandomWord(completion: @escaping (StoreRandomWords?) -> Void) {
        let language = "en"
        let filters = "registers%3DRare%3Bdomains%3DArt?"
        let limit = "limit=1"
        let url = URL(string: "https://od-api.oxforddictionaries.com:443/api/v1/wordlist/\(language)/\(filters)\(limit)")!
        var request = URLRequest(url: url)
        request.addValue("application/json", forHTTPHeaderField: "Accept")
        request.addValue(appId, forHTTPHeaderField: "app_id")
        request.addValue(appKey, forHTTPHeaderField: "app_key")

        let task = URLSession.shared.dataTask(with: request) { data, response, error in
            if let data = data {
                do {
                let jsonData = try JSONDecoder().decode(StoreRandomWords.self, from: data)
                print(jsonData)
                } catch {
                    print(error)
                }
            } else {
                print(error)
                print(NSString.init(data: data!, encoding: String.Encoding.utf8.rawValue)!)
            }
        }
        task.resume()
    }

还有我想在其中加载“单词”的ViewController中的代码:

// Do any additional setup after loading the view.
override func viewDidLoad() {
    super.viewDidLoad()

    // Fetch data for Daily Word.
    ContextController.shared.fetchRandomWord( completion: { (storeRandomWord) in
        if let storeRandomWord = storeRandomWord {
          //

        }
    })
  }

这使我在控制台中得到以下输出:

StoreRandomWords(results: [GetContext.Result(word: "eurhythmic")])

我的目标是从字面上显示价值词,在这里是“节奏性”。

(我是一个初学者,而不是说英语的母语人士,因此,对于如何改进代码或问题的任何反馈都将有所帮助,欢迎您使用。)

您将必须循环数组或访问索引科学storeRandomWords.results是一个数组。

例如,打印第一个结果:

if let storeRandomWord = storeRandomWord {
    print(storeRandomWord.results.first.word)
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM