Swift 2.0 - 按子数组重新排列 JSON 对象

Posted

技术标签:

【中文标题】Swift 2.0 - 按子数组重新排列 JSON 对象【英文标题】:Swift 2.0 - Rearranging a JSON object by sub array 【发布时间】:2016-02-22 07:59:53 【问题描述】:

我正在使用 SwiftyJSON 在 JSON 中创建数据字典。 现在我想通过friend_health_points 安排一个名为fb_friends 的子词典。

我尝试使用排序或任何其他操作,但出现字符串/JSON 错误。

所以基本上我正在尝试对其进行排序,以便在该数据字典中将 150 个健康点排在第一位,将 20 个排在最后。

这是数据:

var data: JSON = [
        "user_id": 7742,
        "name": "Bla",
        "fb_friends": [
            [
                "friend_id": 202072,
                "friend_name": "Bla Bla",
                "friend_photo_url": "https://www.gravatar.com/avatar/",
                "friend_health_points": 50,
            ],
            [
                "friend_id": 502333,
                "friend_name": "hdfghdfghfdgh",
                "friend_photo_url": "https://www.gravatar.com/avatar/",
                "friend_health_points": 150,
            ],
            [
                "friend_id": 202072,
                "friend_name": "gjhkghjk",
                "friend_photo_url": "https://www.gravatar.com/avatar/",
                "friend_health_points": 20,
            ]
]

【问题讨论】:

你的json无效 json 工作正常... 【参考方案1】:

这是一个没有第三方库的解决方案

var data = [
  "user_id": 7742,
  "name": "Bla",
  "fb_friends": [
    [
      "friend_id": 202072,
      "friend_name": "Bla Bla",
      "friend_photo_url": "https://www.gravatar.com/avatar/",
      "friend_health_points": 50,
    ],
    [
      "friend_id": 502333,
      "friend_name": "hdfghdfghfdgh",
      "friend_photo_url": "https://www.gravatar.com/avatar/",
      "friend_health_points": 150,
    ],
    [
      "friend_id": 202072,
      "friend_name": "gjhkghjk",
      "friend_photo_url": "https://www.gravatar.com/avatar/",
      "friend_health_points": 20,
    ]
  ]
]

let friends = (data["fb_friends"] as! [[String:AnyObject]]).sort ($0["friend_health_points"] as! Int) > $1["friend_health_points"] as! Int
data["fb_friends"] = friends
print(data)

let json = JSON(data)

【讨论】:

谢谢 vadian,但我需要它作为 JSON 类型,我正在构建应用程序以使用 3rd 方 API。 您可以使用let json = JSON(data)从排列好的字典中轻松创建JSON对象【参考方案2】:

好的,我找到了答案,因为对象是SwiftyJSON 类型,我可以使用arrayValue 将其提取到数组中。 所以这会给我一个排序好的朋友数组。

let fbFriends = data["fb_friends"]
let friendsArray = fbFriends.arrayValue
let sortedFriends = friendsArray.sort  $0["friend_health_points"].doubleValue > $1["friend_health_points"].doubleValue 

【讨论】:

以上是关于Swift 2.0 - 按子数组重新排列 JSON 对象的主要内容,如果未能解决你的问题,请参考以下文章

Swift 2.0 对象数组到 JSON 字符串

Firebase 和 Swift 如何按子值提取特定记录?

修改行数组时,Swift 2数据不会重新加载数据

Alamofire 奇怪的 JSON 前缀 - Swift 2.0

重新排列 coredata 表格视图单元格(swift)

在 swift 2.0 中解析 JSON 时出错