使用 iOS 和 Swift 访问深度嵌套的 json 数据的最简单方法是什么?

e987

我正在使用 Swift 5.1 并且我有一个深度嵌套的 json 文件,我只想访问 json 文件中的一些元素并忽略其余数据。例如,我只想要下面 json 字符串数组中的“artistName”和“releaseDate”值。如果我使用嵌套的可解码结构,我不想仅仅为了获得这两个值的数组而声明每个键名。


{"feed":{"title":"Coming Soon","id":"https://rss.itunes.apple.com/api/v1/us/apple-music/coming-soon/all/10/explicit.json","author":{"name":"iTunes Store","uri":"http://wwww.apple.com/us/itunes/"},"links":[{"self":"https://rss.itunes.apple.com/api/v1/us/apple-music/coming-soon/all/10/explicit.json"},{"alternate":"https://itunes.apple.com/WebObjects/MZStore.woa/wa/viewRoom?fcId=1396220241\u0026app=music"}],"copyright":"Copyright © 2018 Apple Inc. All rights reserved.","country":"us","icon":"http://itunes.apple.com/favicon.ico","updated":"2019-12-04T01:48:22.000-08:00",

    "results":[{"artistName":"Stormzy","id":"1487951013","releaseDate":"2019-12-13","name":"Heavy Is The Head","kind":"album","copyright":"℗ 2019 Hashtag Merky Music Limited under exclusive license to Atlantic Records UK, a division of Warner Music UK Limited.","artistId":"394865154","contentAdvisoryRating":"Explicit","artistUrl":"https://music.apple.com/us/artist/stormzy/394865154?app=music","artworkUrl100":"https://is5-ssl.mzstatic.com/image/thumb/Music123/v4/3c/a8/7c/3ca87c13-bffa-3ebd-eec6-68ea78ab556d/190295403003.jpg/200x200bb.png","genres":[{"genreId":"18","name":"Hip-Hop/Rap","url":"https://itunes.apple.com/us/genre/id18"},{"genreId":"34","name":"Music","url":"https://itunes.apple.com/us/genre/id34"}],"url":"https://music.apple.com/us/album/heavy-is-the-head/1487951013?app=music"},{"artistName":"Camila Cabello","id":"1487577356","releaseDate":"2019-12-06","name":"Romance","kind":"album","copyright":"℗ 2019 Simco Ltd. under exclusive license to Epic Records, a division of Sony Music Entertainment","artistId":"935727853","contentAdvisoryRating":"Explicit","artistUrl":"https://music.apple.com/us/artist/camila-cabello/935727853?app=music","artworkUrl100":"https://is4-ssl.mzstatic.com/image/thumb/Music113/v4/fa/89/c7/fa89c706-fecc-2ece-cfc2-661c42807fbd/886448121220.jpg/200x200bb.png","genres":[{"genreId":"14","name":"Pop","url":"https://itunes.apple.com/us/genre/id14"},{"genreId":"34","name":"Music","url":"https://itunes.apple.com/us/genre/id34"}],"url":"https://music.apple.com/us/album/romance/1487577356?app=music"},{"artistName":"Harry Styles","id":"1485802965","releaseDate":"2019-12-13","name":"Fine Line","kind":"album","copyright":"℗ 2019 Erskine Records Limited, under exclusive license to Columbia Records, a Division of Sony Music Entertainment","artistId":"471260289","artistUrl":"https://music.apple.com/us/artist/harry-styles/471260289?app=music","artworkUrl100":"https://is4-ssl.mzstatic.com/image/thumb/Music113/v4/72/89/85/728985d1-9484-7b71-1ea8-0f0654f7dc16/886448022213.jpg/200x200bb.png","genres":[{"genreId":"14","name":"Pop","url":"https://itunes.apple.com/us/genre/id14"},{"genreId":"34","name":"Music","url":"https://itunes.apple.com/us/genre/id34"}],"url":"https://music.apple.com/us/album/fine-line/1485802965?app=music"},{"artistName":"Grimes","id":"1487294744","releaseDate":"2020-02-21","name":"Miss Anthropocene","kind":"album","copyright":"℗ 2020 4AD Ltd","artistId":"2756920","contentAdvisoryRating":"Explicit","artistUrl":"https://music.apple.com/us/artist/grimes/2756920?app=music","artworkUrl100":"https://is3-ssl.mzstatic.com/image/thumb/Music113/v4/a9/ff/a4/a9ffa497-a6d4-d21a-811b-c88bd0a18de8/dj.pkknchvn.jpg/200x200bb.png","genres":[{"genreId":"7","name":"Electronic","url":"https://itunes.apple.com/us/genre/id7"},{"genreId":"34","name":"Music","url":"https://itunes.apple.com/us/genre/id34"}],"url":"https://music.apple.com/us/album/miss-anthropocene/1487294744?app=music"},{"artistName":"Kesha","id":"1484385866","releaseDate":"2020-01-10","name":"High Road","kind":"album","copyright":"℗ 2019 Kemosabe Records","artistId":"334854763","contentAdvisoryRating":"Explicit","artistUrl":"https://music.apple.com/us/artist/kesha/334854763?app=music","artworkUrl100":"https://is3-ssl.mzstatic.com/image/thumb/Music113/v4/52/0a/df/520adf4c-36e7-5d7d-114d-c5682df53b98/886447918104.jpg/200x200bb.png","genres":[{"genreId":"14","name":"Pop","url":"https://itunes.apple.com/us/genre/id14"},{"genreId":"34","name":"Music","url":"https://itunes.apple.com/us/genre/id34"}],"url":"https://music.apple.com/us/album/high-road/1484385866?app=music"},{"artistName":"Tame Impala","id":"1484742845","releaseDate":"2020-02-14","name":"The Slow Rush","kind":"album","copyright":"An Island Records Australia release; ℗ 2019 Modular Recordings Pty Ltd","artistId":"290242959","artistUrl":"https://music.apple.com/us/artist/tame-impala/290242959?app=music","artworkUrl100":"https://is4-ssl.mzstatic.com/image/thumb/Music123/v4/a3/d2/fc/a3d2fc93-8911-6f99-854a-8b2a107450d6/19UMGIM96748.rgb.jpg/200x200bb.png","genres":[{"genreId":"20","name":"Alternative","url":"https://itunes.apple.com/us/genre/id20"},{"genreId":"34","name":"Music","url":"https://itunes.apple.com/us/genre/id34"}],"url":"https://music.apple.com/us/album/the-slow-rush/1484742845?app=music"},{"artistName":"Five Finger Death Punch","id":"1487244856","releaseDate":"2020-02-28","name":"F8","kind":"album","copyright":"℗ 2020 Five Finger Death Punch, under exclusive license to Better Noise Music","artistId":"258875116","contentAdvisoryRating":"Explicit","artistUrl":"https://music.apple.com/us/artist/five-finger-death-punch/258875116?app=music","artworkUrl100":"https://is4-ssl.mzstatic.com/image/thumb/Music113/v4/34/86/e7/3486e71f-6a83-79ae-e44e-7d1a8ed3694f/849320060208.png/200x200bb.png","genres":[{"genreId":"1153","name":"Metal","url":"https://itunes.apple.com/us/genre/id1153"},{"genreId":"34","name":"Music","url":"https://itunes.apple.com/us/genre/id34"},{"genreId":"21","name":"Rock","url":"https://itunes.apple.com/us/genre/id21"}],"url":"https://music.apple.com/us/album/f8/1487244856?app=music"},{"artistName":"Dio","id":"1485638854","releaseDate":"2004-09-07","name":"Master of the Moon (Deluxe Edition) [2019 - Remaster]","kind":"album","copyright":"℗ 2019 Niji Entertainment Group under exclusive license to BMG Rights Management (US) LLC","artistId":"2779392","artistUrl":"https://music.apple.com/us/artist/dio/2779392?app=music","artworkUrl100":"https://is1-ssl.mzstatic.com/image/thumb/Music123/v4/ac/1c/71/ac1c719d-b014-a870-267b-1c25c7300a99/4050538544442.jpg/200x200bb.png","genres":[{"genreId":"21","name":"Rock","url":"https://itunes.apple.com/us/genre/id21"},{"genreId":"34","name":"Music","url":"https://itunes.apple.com/us/genre/id34"}],"url":"https://music.apple.com/us/album/master-of-the-moon-deluxe-edition-2019-remaster/1485638854?app=music"},{"artistName":"Lauv","id":"1480846311","releaseDate":"2020-03-06","name":"~how i'm feeling~","kind":"album","copyright":"℗ 2020 Lauv under exclusive license to AWAL Recordings America, Inc.","artistId":"982612996","contentAdvisoryRating":"Explicit","artistUrl":"https://music.apple.com/us/artist/lauv/982612996?app=music","artworkUrl100":"https://is1-ssl.mzstatic.com/image/thumb/Music123/v4/1f/ef/9b/1fef9b0b-ef42-ecc2-3ba5-33dbfa0927fb/5056167113867_1.jpg/200x200bb.png","genres":[{"genreId":"14","name":"Pop","url":"https://itunes.apple.com/us/genre/id14"},{"genreId":"34","name":"Music","url":"https://itunes.apple.com/us/genre/id34"}],"url":"https://music.apple.com/us/album/how-im-feeling/1480846311?app=music"},{"artistName":"Sepultura","id":"1485593522","releaseDate":"2020-02-07","name":"Quadra","kind":"album","copyright":"℗ 2020 Nuclear Blast","artistId":"918092","artistUrl":"https://music.apple.com/us/artist/sepultura/918092?app=music","artworkUrl100":"https://is3-ssl.mzstatic.com/image/thumb/Music123/v4/08/70/ab/0870abad-d062-4819-e5dd-9e33c6836966/cover.jpg/200x200bb.png","genres":[{"genreId":"1153","name":"Metal","url":"https://itunes.apple.com/us/genre/id1153"},{"genreId":"34","name":"Music","url":"https://itunes.apple.com/us/genre/id34"},{"genreId":"21","name":"Rock","url":"https://itunes.apple.com/us/genre/id21"}],"url":"https://music.apple.com/us/album/quadra/1485593522?app=music"}]}}

罗伯·纳皮尔

正如 Joakim 在评论中建议的那样,最简单的方法是将其扔到https://app.quicktype.io,然后删除您不关心的内容。那留下:

struct Welcome: Codable {
    let feed: Feed
}

struct Feed: Codable {
    let results: [Result]
}

struct Result: Codable {
    let artistName, releaseDate: String
}

let results = try JSONDecoder().decode(Welcome.self, from: jsonData).feed.results

如果你想让它使用起来更简单一些,你可以像这样合并 Welcome 和 Feed:

struct Feed: Codable {
    let results: [Result]

    enum FeedKeys: CodingKey { case feed }
    enum ResultsKeys: CodingKey { case results }

    init(from decoder: Decoder) throws {
        let feed = try decoder.container(keyedBy: FeedKeys.self)
        let results = try feed.nestedContainer(keyedBy: ResultsKeys.self, forKey: .feed)
        self.results = try results.decode([Result].self, forKey: .results)
    }
}

let results = try JSONDecoder().decode(Feed.self, from: jsonData).results

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

使用Python进行SSH的最简单方法是什么?

当要解析的元素是json字符串的元素时,使用gson解析json的最简单方法是什么?

如何访问深度嵌套的json键和值

使用Swift从AFNetworking访问JSON数据

在多个iOS和Android设备之间保持数据库同步的最简单方法是什么?

在iOS Swift中解析JSON格式的最佳方法是什么?

使用jQuery和Javascript获取json并解析它的最简单方法?

如何使用angular显示和过滤深度嵌套的JSON

使用matplotlib从JSON绘制数据的最简单方法吗?

Firebase分页-Swift和iOS。什么时候应该使用?

Swift 4中使用复杂和嵌套数据进行JSON解析

使用社交身份验证限制访问静态网站的最简单方法是什么

使用Moshi / Retrofit2访问深度嵌套的JSON数组

使用Swift访问JSON中的嵌套词典

做字符串包含使用Kendo Grid和Odata数据源对数字列进行过滤的最简单方法是什么?

使用Swift解析嵌套JSON数据的正确方法是什么?

使用索引数组访问和修改Javascript中的任意深度嵌套数组

使用ruby脚本在MySQL中插入数据的最简单方法是什么

使用部分匹配的字符串进行CLI搜索和替换的最简单方法是什么?

开始使用LaTeX的最简单方法是什么?

使用Swift访问JSON

反应访问语言环境的最简单方法是什么

将背景音乐添加到 Swift iOS 应用程序的最简单方法是什么?

为嵌套 for 循环最大化 CPU 使用率的最简单方法是什么?

在 Google ML Engine 上部署以 .model .json 和 .h5 形式提供的 Keras/Tensorflow CNN 的最简单方法是什么?

合并 / 和 /home 的最简单方法是什么?

使用 Python 访问 HTML <script> 标签内深度嵌套的数据

在 iOS Swift 中使用 codable 解析嵌套的 json 响应数据?

将 SeatGeek API 数据(JSON 格式)导入平面数据框的最简单方法是什么?