Arrays 如何在sting数组中附加Json值?

Arrays 如何在sting数组中附加Json值?,arrays,json,parsing,swift5,Arrays,Json,Parsing,Swift5,我正在用Alamofire和SwiftyJSON解析Json。我可以从url中看到所有json数据。在我的控制台中一切都很清楚,但我需要在字符串数组中附加一些值。正如您所看到的,json值。我创建了3个字符串数组。我需要在阵列中添加球队、球员姓名和奖杯。我将在tableview中列出球队和球员姓名。我需要帮助在数组中附加值 //控制台中的json值 [ { "id" : 1, "team" : "Liverpool", "players" : [ {

我正在用Alamofire和SwiftyJSON解析Json。我可以从url中看到所有json数据。在我的控制台中一切都很清楚,但我需要在字符串数组中附加一些值。正如您所看到的,json值。我创建了3个字符串数组。我需要在阵列中添加球队、球员姓名和奖杯。我将在tableview中列出球队和球员姓名。我需要帮助在数组中附加值

//控制台中的json值

[
  {
    "id" : 1,
    "team" : "Liverpool",
    "players" : [
      {
        "id" : 2,
        "name" : "Alisson",
        "position" : "Goal Keeper",
        "number" : "13"
      },
      {
        "id" : 3,
        "name" : "Salah",
        "position" : "Forward",
        "number" : "10"
      }
    ],
    "trophies" : [
      "2019 champions league",
      "2005 champions league"
    ],
    "logoUrl" : "url"
  },
  {
    "id" : 4,
    "team" : "Real Madrid",
    "players" : [
      {
        "id" : 5,
        "name" : "Ramos",
        "position" : "Defender",
        "number" : "4"
      },
      {
        "id" : 6,
        "name" : "Benzema",
        "position" : "Forward",
        "number" : "9"
      }
    ],
    "trophies" : [
      "2018 champions league",
      "2017 champions league",
      "2016 champions league"
    ],
    "logoUrl" : "url"
  }
]


首先使
res
可变

var res = try JSONDecoder().decode([PageData].self, from:data)
为利物浦增加一名球员

if let index = res.firstIndex(where: { $0.name == "Liverpool"}) {
   res[index].players.append(Player(id: 7, name: "Virgil van Dijk", position: "Defender", number: "4"))
}
为皇家马德里增添一座奖杯

if let index = res.firstIndex(where: { $0.name == "Real Madrid"}) {
   res[index].trophies.append("None in 2019")
}
添加一个团队

res.append(PageData(team: "Paris Saint-Germain", 
                    players: [Player(id: 8, name: "Neymar Jr.", position: "Forward", number: "10")], 
                    trophies: ["Ligue 1 2019"]))

根据您的代码,您不需要使用
SwiftyJSON

首先使
res
可变

var res = try JSONDecoder().decode([PageData].self, from:data)
为利物浦增加一名球员

if let index = res.firstIndex(where: { $0.name == "Liverpool"}) {
   res[index].players.append(Player(id: 7, name: "Virgil van Dijk", position: "Defender", number: "4"))
}
为皇家马德里增添一座奖杯

if let index = res.firstIndex(where: { $0.name == "Real Madrid"}) {
   res[index].trophies.append("None in 2019")
}
添加一个团队

res.append(PageData(team: "Paris Saint-Germain", 
                    players: [Player(id: 8, name: "Neymar Jr.", position: "Forward", number: "10")], 
                    trophies: ["Ligue 1 2019"]))
根据您的代码,您不需要使用SwiftyJSON

1-声明一个数组,如

var arr = [PageData]()
2-在此处分配并重新加载

arr = try JSONDecoder().decode([PageData].self, from:data)
self.tableView.reloadData()
3-设置数据源和委托

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return arr.count
}

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "cell") as! CellName
    let item = arr[indexPath.row]
    cell.teamlbl.text = item.team
    cell.playerslbl.text = item.players.map{ $0.name}.joined(separator:"-")
    cell.trophieslbl.text = item.trophies.joined(separator:"-")
    return cell
}

编辑:

  var teams = [String]()
  var players = [Player]()
  var trophies = [String]()


  arr = try JSONDecoder().decode([PageData].self, from:data)
  self.teams = arr.compactMap { $0.team }
  self.players = arr.flatMap { $0.players }.compactMap { $0.name }
  self.trophies = arr.flatMap { $0.trophies } 
  self.tableView.reloadData()
你需要做什么

1-声明一个数组,如

var arr = [PageData]()
2-在此处分配并重新加载

arr = try JSONDecoder().decode([PageData].self, from:data)
self.tableView.reloadData()
3-设置数据源和委托

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return arr.count
}

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "cell") as! CellName
    let item = arr[indexPath.row]
    cell.teamlbl.text = item.team
    cell.playerslbl.text = item.players.map{ $0.name}.joined(separator:"-")
    cell.trophieslbl.text = item.trophies.joined(separator:"-")
    return cell
}

编辑:

  var teams = [String]()
  var players = [Player]()
  var trophies = [String]()


  arr = try JSONDecoder().decode([PageData].self, from:data)
  self.teams = arr.compactMap { $0.team }
  self.players = arr.flatMap { $0.players }.compactMap { $0.name }
  self.trophies = arr.flatMap { $0.trophies } 
  self.tableView.reloadData()

我从url获取信息。我需要在tableview中列出以下项目。我将在标签中列出团队。我将在另一个标签中列出球员,我将在文本视图中列出奖杯,所有这些奖杯都将在tableview单元格中。结构非常简单。直接从结构成员那里获取所需信息。我真的需要帮助。我有3个字符串数组。球队、球员姓名和奖杯。我需要在数组中附加这些信息。你能帮我一下吗。我是初学者,我需要帮助:/你的问题不清楚。数组中的信息意味着什么?我的回答描述了如何向
res
数组添加信息。为什么需要多个阵列?你得到了结构。@vadian你可能只需要将数组转换回json(对其进行编码),我从url获取信息。我需要在tableview中列出以下项目。我将在标签中列出团队。我将在另一个标签中列出球员,我将在文本视图中列出奖杯,所有这些奖杯都将在tableview单元格中。结构非常简单。直接从结构成员那里获取所需信息。我真的需要帮助。我有3个字符串数组。球队、球员姓名和奖杯。我需要在数组中附加这些信息。你能帮我一下吗。我是初学者,我需要帮助:/你的问题不清楚。数组中的信息意味着什么?我的回答描述了如何向
res
数组添加信息。为什么需要多个阵列?您得到了结构。@vadian当我单击tableview时,您可能只需要将数组转换回json(对其进行编码),segue会将所有信息发送到detail view。你能告诉我如何像我的代码一样在数组中附加值吗?谢谢你,但这不是我需要的,我的朋友。我需要用segue将数据发送到另一个视图。我需要将值附加到3个不同的数组。我需要使用这样的代码cell.lblTeam.text=team[indexPath.row]如果这样做的话,请参见编辑,因为3个数组的大小不同,不适合表数据源
arr[indexPath.row].team
是相同的,它封装了与该项目相关的所有球员/奖杯。当我单击tableview时,segue会将所有信息发送到detail view。你能告诉我如何像我的代码一样在数组中附加值吗?谢谢你,但这不是我需要的,我的朋友。我需要用segue将数据发送到另一个视图。我需要将值附加到3个不同的数组。我需要使用这样的代码cell.lblTeam.text=team[indexath.row]如果这样做,请参见编辑,您的3个数组的大小将不同,并且不适合表格数据源
arr[indexPath.row]。team
是相同的,它封装了与该项目相关的所有玩家/奖杯