如何忽略 JSON 解析回数据中的某些对象?

Posted

技术标签:

【中文标题】如何忽略 JSON 解析回数据中的某些对象?【英文标题】:How to ignore some objects in JSON parsed back data? 【发布时间】:2020-03-21 18:56:57 【问题描述】:

对于以下示例 JSON 数据的实例,我想保留具有内容和视频属性的对象,并忽略那些没有它们的对象。像 2nd、3rd 这样只有地址和错误属性的对象应该被忽略。

//JSON数据示例

[
  
    "content": "asdhh",
    "url": "dasddd",
    "country": "kkjkkj",
    "address": "aksjdkasjd"
  ,
  
    "address": "aabbccdd"
  ,
  
    "error": "error description"
  
]

我尝试使用if video.content != nil && video.url != nil 来控制 ForEach 循环中 VideoListRow 的显示。但事实证明,我无法在 ForEach 闭包中调用 video.property。那么我怎么能忽略不需要的解析回数据而只显示想要的对象,在这种情况下只需要第一个对象。

var body: some View 
        List 
            ForEach(self.model.videos)  video in
                if video.content != nil && video.url != nil 
                  VStack(spacing: 0) 
                      VideoListRow(video: url)
                  
                
            
        .onAppear() 
            self.model.getVideoBundle()
        
    

// 更改我的代码以添加过滤器: 较小的修改是使用|| 而不是&&。因为我想保留只有内容和网址之一的对象,所以那个是有效的。仅当它不包括其中两个时,才忽略它。

ForEach(
    self.model.videos.filter  (video) -> Bool in
        video.content != nil || video.url != nil
    
)  video in
    VStack(spacing: 0) 
        VideoListRow(video: url)
    

【问题讨论】:

【参考方案1】:

先过滤数据!

ForEach(
    self.model.videos.filter  (video) -> Bool in
        video.content != nil && video.url != nil
    
)  video in
    VStack(spacing: 0) 
        VideoListRow(video: url)
    

【讨论】:

像魅力一样工作!谢谢你。其实这个过滤器是CombineRepublishes all elements that match a provided closure.中的一个新方法,我现在明白了。

以上是关于如何忽略 JSON 解析回数据中的某些对象?的主要内容,如果未能解决你的问题,请参考以下文章

在 JSON.NET 数据解析期间忽略解析错误

使用moment.js解析时如何忽略时区

在JSON.NET数据解析期间忽略解析错误

当某些返回值可能是对象或对象集合时,如何使用 GWT AutoBeans 解析 JSON 消息?

如何在 Ios 中解析数组数据中的嵌套 Json 对象

如何解析 JSON 中的所有数据?