如何子集 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 对象