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Вы сами довольно прямолинейны...

Другие вопросы по тегам