如何从JSON对象数组中删除具有特定键/值对的所有JSON对象?

佐佐木仁

我想像这样过滤数据集:

例如,这是一些假数据集:

[
    {
      "name": "Sakura",
      "hasChildren": false,
      "livesInCity": true,
      "pets": [
          { 
              "cats": ["Luna", "Milk"],
              "type": "tabby"
          }
       ]
    },
    {
      "name": "Linn",
      "hasChildren": false,
      "livesInCity": true,
      "pets": [
          { 
              "cats": ["Luna"],
              "type": "tabby"
          }
       ]
    },
    {
      "name": "Donna",
      "hasChildren": false,
      "livesInCity": false,
      "pets": [
          { 
              "cats": ["Luna", "Milk"],
              "type": "tabby"
          }
       ]
    },
    {
      "name": "Tia",
      "hasChildren": false,
      "livesInCity": false,
      "pets": [
          { 
              "cats": ["Luna", "Milk"],
              "type": "tuxedo"
          }
       ]
    },
    {
      "name": "Dora",
      "hasChildren": false,
      "livesInCity": true,
      "pets": [
          { 
              "cats": ["Artemis", "Milk"],
              "type": "tuxedo"
          }
       ]
    }
]

我想过滤掉所有具有的内容"livesInCity": false

[
    {
      "name": "Sakura",
      "hasChildren": false,
      "livesInCity": true,
      "pets": [
          { 
              "cats": ["Luna", "Milk"],
              "type": "tabby"
          }
       ]
    },
    {
      "name": "Linn",
      "hasChildren": false,
      "livesInCity": true,
      "pets": [
          { 
              "cats": ["Luna"],
              "type": "tabby"
          }
       ]
    },
    {
      "name": "Dora",
      "hasChildren": false,
      "livesInCity": true,
      "pets": [
          { 
              "cats": ["Artemis", "Milk"],
              "type": "tuxedo"
          }
       ]
    }
]

我怎样才能做到这一点?这可能吗?

我相信在python中是这样的,但是我不知道如何开始使用Swift:

people = [person for person in people if person.livesInCity == True]

另外,如何过滤上面的数据集看起来像这样-我想按名称类型进行分类。

{
    "tabby": ["Sakura", "Linn"],
    "tuxedo": ["Dora"],
}

任何帮助将不胜感激!

pawello2222

正如评论中已经提到的那样,您不能在Swift中直接处理JSON对象。它们需要首先进行转换。

您可以将JSON解析为Swift对象,然后执行过滤,分组等。

struct Person: Codable {
    let name: String
    let hasChildren: Bool
    let livesInCity: Bool
    let pets: [Pet]
}

struct Pet: Codable {
    let cats: [String]
    let type: String
}
let jsonStr = "[{"name": "Sakura", ..." // your JSON string
let jsonData = jsonStr.data(using: .utf8)!
let parsedObjects = try! JSONDecoder().decode([Person].self, from: data)

然后,您可以过滤您的parsedObjects:

let filteredObjects = parsedObjects.filter({ person in person.livesInCity == true })

或更短的(更快的)版本:

let filteredObjects = parsedObjects.filter { $0.livesInCity }

您也可以尝试按宠物类型分组:

var groupedDict = [String:[String]]()
filteredObjects.forEach{ person in
    person.pets.forEach { pet in
        if let _ = groupedDict[pet.type] {
            groupedDict[pet.type]!.append(person.name)
        } else {
            groupedDict[pet.type] = [person.name]
        }
    }
}
print(groupedDict)
//prints ["tabby": ["Sakura", "Linn"], "tuxedo": ["Dora"]]

如果您想随时将对象转换回JSON,可以使用:

let dictData = try! JSONEncoder().encode(groupedDict)
let dictStr = String(data: dictData, encoding: .utf8)!
print(dictStr)
//prints {"tabby":["Sakura","Linn"],"tuxedo":["Dora"]}

注意

为了简单起见,我在解码/编码对象时使用了强制可选的展开!)。您可能要改用do-try-catch(以捕获错误)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

从JSON对象中删除键值对

删除嵌套数组中具有键值的对象

如何选择具有特定值的特定JSON对象?

使用特定键值从数组中删除所有对象

删除具有对象键值猫鼬的数组元素

如何从具有多个数组的大对象中获取特定的键值

如何从json数组列中获取具有特定键值的json对象?

从json数据中删除特定的或选定的属性。我不想删除所有具有Category:null的键值对

如何从数组内的所有对象中删除一个简单的特定键值对

如何在具有键值对的对象数组中查找值

如何从数组中删除所有不具有特定属性的对象?

具有键值的JSON对象的数组格式

在PHP中,如何删除对象数组中的重复项,其中重复项定义为具有相同值的键值对的子集

如何从对象数组中删除所有重复对象?

如何检查我推送到对象中的对象数组是否具有另一个对象数组中的特定键值

如何删除所有嵌套的JSON对象?

如何对具有json对象组的json数组进行排序

为JSON中的所有对象获取特定的键值

如何在具有JSON字符串的Java脚本对象中访问特定的键值对

如何在Swift中解析具有对象的JSON数组

从所有对象中具有 id 的数组中获取对象,这些对象作为每个对象中的键值对存储在数组中

从数组中删除具有特定“键:值”的对象

如何从数组数组中删除特定的 json 对象

删除所有重复出现的 JSON 对象数组

从对象中提取键值到具有特定字段的对象数组中

从数组中删除具有特定键值的重复对象

从对象数组中删除具有相同键值的对象

如何删除json文件中对象内的所有内容但保留对象?

如何使用PHP计算JSON数组中存在具有特定键值对的对象的安装次数