Не удается получить доступ к данным из вложенного массива в JSON в Swift - PullRequest
0 голосов
/ 09 мая 2019

У меня есть JSON с вложенным массивом, я хотел бы получить доступ к одной из данных, содержащихся в этом вложенном массиве, но я понятия не имею, как я могу это сделать.

Я разрабатываюIOS App и попробуйте проанализировать некоторые данные из (локально пока) JSON.Я хочу показать некоторые данные пользователю.

Вот как выглядит мой JSON:

{
"format": "json",
"data": [
    {
        "type": "channel",
        "id": "789",
        "updated_at": "2019-05-03 11:32:57",
        "unread_count": 3,
        "title": "title",
        "context": "search",
        "relationships": {
            "recipients": [
                {
                    "type": "user",
                    "rating": 5,
                    "is_spotlighted": false,
                    "id": 123,
                    "participant_id": 456
                }
            ],
        }
    }
}

, сейчас я обращаюсь к другому значению с помощью:

struct Root: Decodable {
    let format: String
    let data: [ChannelData]
}

struct ChannelData: Decodable {
    let title, type, id, context, updatedAt: String
    let unreadCount: Int
    let relationships: Relationships
}

struct Relationships: Decodable {
    let recipients: [Recipient]
}

struct Recipient: Decodable {
    let type: String
    let id: Int
    let participantId: Int
    let isSpotlighted: Bool
    let rating: Double
}

Данные, к которым я хочу получить доступ, - это "rating "

Вот так выглядит мой viewDidLoad ():

var chatList = [ChannelData]()

override func viewDidLoad() {

    super.viewDidLoad()
    let url = Bundle.main.url(forResource: "channels", withExtension: "json")!
    let data = try! Data(contentsOf: url)
    let decoder = JSONDecoder()
    decoder.keyDecodingStrategy = .convertFromSnakeCase
    let result = try! decoder.decode(Root.self, from: data)
    chatList = result.data
    self.tableView.reloadData()
}

Когда в другой функции я пытаюсь получить доступ к рейтингу через:

let currentChat = chatList[indexPath.row]
cell.Name.text = currentChat.relationships.recipients

Nothingотображается, когда я пытаюсь получить другие параметры после .recipients.Я новичок в использовании JSON и более или менее в Swift.

1 Ответ

0 голосов
/ 09 мая 2019

Relationships содержит одно свойство recipients с типом [Recipient].Вы можете использовать .first для доступа к первому Recipient объекту из массива.Тогда вы можете получить любое свойство от Recipient объекта

cell.Name.text = currentChat.relationships.recipients.first?.rating
...