无法迅速从JSON中的嵌套数组访问数据

时间:2019-05-09 02:02:17

标签: arrays json swift struct nested

我有一个带有嵌套数组的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
}

我要访问的数据是“评级”

这是我的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

当我尝试在.recipients之后获取其他参数时,什么也没有显示。我是使用JSON的初学者,也或多或少地使用Swift。

1 个答案:

答案 0 :(得分:0)

Relationships包含一个类型为recipients的属性[Recipient]。您可以使用.first访问数组中的第一个Recipient对象。然后,您可以从Recipient对象获得任何属性

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