gpt4 book ai didi

json - 在 Swift 中解析 Gravatar 配置文件 JSON

转载 作者:行者123 更新时间:2023-11-28 05:40:21 25 4
gpt4 key购买 nike

我正在 iOS Swift 应用程序中正确加载我自己的个人资料信息,但 JSON 有一个与之关联的对象,这让我困惑如何正确解析它以访问其中的数据。这是我的方法。

func attemptToLoadProfile(hash: String) {
let url = "https://www.gravatar.com/\(hash).json"
let fileURL = URL(string: url)
do {
let contents = try String(contentsOf: fileURL!)
let data = contents.data(using: String.Encoding.utf8)
let json = try? JSONSerialization.jsonObject(with: data!, options: [])
print(json!)

} catch {
print("error parsing json")
}
}

这工作正常,但当我打印出来时,JSON 格式如下。

{
entry = (
{
displayName = edolecki;
hash = <myhash here>;
id = 1333520;
name = {
familyName = Dolecki;
formatted = "Eric Dolecki";
givenName = Eric;
};
photos = (
{
type = thumbnail;
value = "https://secure.gravatar.com/avatar/<myhash here>";
}
);
preferredUsername = edolecki;
profileUrl = "http://gravatar.com/edolecki";
requestHash = <myhash here>;
thumbnailUrl = "https://secure.gravatar.com/avatar/<myhash here>";
urls = (
);
}
);

我如何解析 JSON 以在根目录中看到该条目对象?我在 displayName、id 等之后。我通常在没有更简化的根的情况下解析 JSON。我以前没见过这个。

最佳答案

entry 键关联的值只是一个只有一个元素的数组。在这种情况下,您可以访问 json["entry"],将其转换为 [[String: Any]] 并访问第一个元素 [0] 。然后你可以访问你想要的东西,比如 displayNameid

一个更好的方法是使用 Codable。使用QuickType ,我生成了这段代码:

struct Root: Codable {
let entry: [Entry]
}

struct Entry: Codable {
let id, hash, requestHash: String
let profileURL: URL
let preferredUsername: String
let thumbnailURL: URL
let photos: [Photo]
let displayName: String

enum CodingKeys: String, CodingKey {
case id, hash, requestHash
case profileURL = "profileUrl"
case preferredUsername
case thumbnailURL = "thumbnailUrl"
case photos, displayName
}
}

struct Photo: Codable {
let value: URL
let type: String
}

然后你可以这样做来解析json:

let decoder = JSONDecoder()
let root = try decoder.decode(Root.self, from: data)
// e.g.
let displayName = root.entry[0].displayName

如果您不需要任何 json KVP,只需将其从结构中删除即可。

关于json - 在 Swift 中解析 Gravatar 配置文件 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56992545/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com