如何子集 SwiftyJSON JSON 对象

Posted

技术标签:

【中文标题】如何子集 SwiftyJSON JSON 对象【英文标题】:How can you subset a SwiftyJSON JSON object 【发布时间】:2015-08-26 06:16:56 【问题描述】:

我正在构建一个 ios 应用程序,其中我的一个 API 调用返回一个大型 JSON blob,我使用 SwiftyJSON 将其加载到 JSON 对象中。例如,它看起来像这样


  "data": 
    "name":"object name",
    "id":1,
    "description":"short description of object",
    "type":"type",
    "runs":[
    ],    

作为应用程序的一部分,用户可以修改名称等内容,但 PATCH 调用的 API 端点需要删除 runs 键。有谁知道如何获取 SwiftyJSON JSON 对象并创建一个具有键子集的新对象。例如,我希望 JSON blob 看起来像


  "data": 
    "name":"object name",
    "id":1,
    "description":"short description of object",
    "type":"type"   

我花了很多时间尝试各种事情,但没有运气。任何帮助将不胜感激。

【问题讨论】:

这样做:json["data"]["runs"] = nil 这并没有完全远程访问条目,而是导致以下结果。我需要删除整个条目,这样标签就不会显示。 json "data": "name":"object name", "id":1, "description":"short description of object", "type":"type", "runs":null 【参考方案1】:

您可以从 SwiftyJSON 对象中获取关联的 dictionaryValue 并使用 removeValueForKey 方法。

当然这意味着你必须将dictionaryValue 分配给一个变量,你不能删除 SwiftyJSON 对象本身的键。

例子:

var dataDict = json["data"].dictionaryValue
dataDict.removeValueForKey("runs")

注意:removeValueForKey 方法名称有点误导;它将删除键,而不仅仅是值。

【讨论】:

谢谢。然后如何将修改后的部分粘贴回原始的 json blob?所以在一天结束时给定var json = JSON(["data": "name":"test", "runs":[]"),我想最终得到的是"data": "name":"test"。我删除了runs 部分,但不清楚之后该做什么。 SwiftyJSON 仅将 JSON 解码为自定义对象,您不能将字典添加到 SwiftyJSON 对象。此外,您不需要:常见的方法是将 SwiftyJSON 对象的 from 值分配给变量并在您的应用程序中使用这些变量,而不是将 SwiftyJSON 对象本身用作可写数据存储(它不是)。 谢谢@eric-d。你让我指出了正确的方向,我能够弄清楚。我理解你关于不直接使用 SwiftyJSON 对象的观点。只是为了其他可能想要它的人,我最终做的是 `var newJSON = JSON(["data":JSON(dataDict)])。 哦,干得好!我忘了我们可以像这样初始化一个新的 SwiftyJSON 对象。不客气,享受并祝贺这个想法。

以上是关于如何子集 SwiftyJSON JSON 对象的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 SwiftyJSON 在 Swift 中解析这个 JSON 对象?

如何使用 SwiftyJSON(在 Swift 中)基于 JSON 对象数组创建对象数组?

如何通过 Alamofire 和 SwiftyJSON 在 UIViewController 中从根目录使用 JSON 对象

如何使用 Swifty JSON 连接两个 json 对象

如何从 SwiftyJSON 对象数组中搜索?

我将如何使用 SwiftyJSON 解析这种类型的 JSON?