使用Codable协议仅解码部分JSON

时间:2018-01-27 18:06:17

标签: ios json swift decode

我的JSON包含array dictionaries并使用Swift的{​​{1}}类对其进行解码。

我想知道,是否有可能让类只解码一些JSONDecoder,而不是所有,例如(可能基于某些标准)?我想,如果dictionaries包含许多array,这可能会有用,但您不希望所有这些都只包含一个{。}}。

如果你知道如何做到这一点,我将非常感谢你的帮助。

1 个答案:

答案 0 :(得分:1)

从技术上讲,人们可以编写一个init(from:)方法,手动获取解码器的容器,然后获得&#34;嵌套&#34;容器(例如nestedUnkeyedContainer),并手动解码该集合中的项目,只添加您想要的项目。有关编写IIF( ([Time].[year-month-date].CURRENTMEMBER IS [Time].[year-month-date].&[jan]) OR ( [Measures].[Base Value]<>([TIME].[year-month-date].CURRENTMEMBER.prevmember,[Measures].[Base Value]) ,NULL ,MAX(PERIODSTODATE([TIME].[year-month-date].[month],[TIME].[year-month- daenter image description herete].CURRENTMEMBER.PREVMEMBER),[Measures].[Sales]) ) 方法的介绍,请参阅Encoding and Decoding Custom Types

但我会劝阻你这样做。解析整个JSON然后init(from:)生成的集合将其提炼为您想要的集合,这将变得更加简单和合理。

除非您有很多记录(例如数百万?),其中解析开销变得可观察,否则我建议您执行filter整个JSON,然后decode您的数组。这将需要更少的代码,并且是更合乎逻辑的方法。

如果你有很多记录,在我考虑filter kludge之前,我会重新考虑使用JSON。我使用CoreData或SQLite或类似的东西,它更适合在提取数据时动态过滤数据。