NSJSONSerialization и NSNull
Иногда я сталкиваюсь со структурой JSON, такой как "data": null". NSJSONSerialization превращает их в NSNull, что, честно говоря, довольно раздражает.
Я понимаю причину этого - такие вещи, как NSDictionary не могут содержать значение ноль.
Это нормально, однако в этих случаях я бы предпочел, чтобы элемент отсутствовал в десериализованной структуре данных, что во многих случаях фактически облегчает обработку. Есть ли опция или конфигурация, которую можно передать NSJSONSerialization, и попросить ее сделать именно это - просто пропустить эти нули в десериализованной структуре данных?
2 ответа
Я не верю, что это возможно. Опции, которые вы можете передать классу, не упоминают ничего подобного, и введение в состояние класса All objects are instances of NSString, NSNumber, NSArray, NSDictionary, or NSNull.
Тем не менее, это может быть использовано в ваших интересах. Если вы обновляете локальный экземпляр объекта через веб-API CRUD-типа, пустые параметры, скорее всего, вообще не будут передаваться в JSON. Однако, если вам нужно было указать nil-ify свойство в локальном экземпляре, для которого в настоящий момент задано значение, если сервер устанавливает для этого атрибута значение null в JSON, вы можете легко проверить, имеет ли объект JSONSerialized этот атрибут, установленный в NSNull, где вы не могли бы, если он отсутствовал.
Лучше всего, если вы контролируете конечную точку, генерирующую JSON, просто не устанавливайте attr вообще.
д-р "нет"
Нет, вы не можете этого сделать, потому что есть семантическая разница между отсутствующим (читай: "неопределенным") значением и явно определенным null
значение.
Хотя некоторые (многие?) API-интерфейсы JSON могут не проводить это различие, что в общем случае нежелательно: если вы, как поставщик API, используете отсутствие атрибута для выполнения удаления на стороне потребителя, это требует от вас всегда отправлять полные сущности в ваш ответы.
Если у ваших сущностей много атрибутов, а у вас есть еще несколько, это может оказать огромное влияние на объем данных, которые вы должны передать своим клиентам.
Кроме того, если вы введете ошибку, из-за которой один из этих атрибутов временно отсутствует, вы начнете путать данные на стороне клиента с каждым запросом, который вы им обслуживаете…
Кроме того, отфильтровывая null
Вы сами довольно прямолинейны...