Есть ли лучший способ построить синтаксис JSON при использовании сервиса AWS SNS?

Я использую AWS Simple Notification Service для отправки push-уведомлений между пользовательскими устройствами. SNS использует формат JSON для отправки удаленных push-уведомлений, как описано здесь: https://github.com/awslabs/aws-sdk-ios-samples/tree/master/SNS-MobileAnalytics-Sample/Swift/#push-notifications-and-track-user-actions

В настоящее время, когда я хочу создать новый удаленный push между устройствами, я бы написал в Swift что-то вроде этого:

var dict = ["default": “default text", "APNS_SANDBOX": "{\"aps\":{\"sound\":\"\", \"content-available\":\"1\", \"priority\":\"5\"}, \”customparameter\":\”test\" }”]

let jsonData = NSJSONSerialization.dataWithJSONObject(dict, options: nil, error: nil)
request.message = NSString(data: jsonData!, encoding: NSUTF8StringEncoding) as! String

//Publish to AWS-endpoint
...

Это работает, но ту часть, где я пишу JSON, трудно читать и она подвержена ошибкам. Есть ли более читаемый способ создания JSON для службы AWS-SNS?


person Toni Nurmi    schedule 10.12.2015    source источник
comment
dict содержит вспомогательный словарь. Таким образом, вы можете создать их, а затем вставить в dict.   -  person Larme    schedule 10.12.2015
comment
Вы пытаетесь сказать нам, что этот API ожидает словарь JSON с одной парой ключ / значение, где значение представляет собой строку, содержащую текст, который может быть проанализирован как JSON? Действительно?   -  person gnasher729    schedule 10.12.2015
comment
@ gnasher729 да, действительно, но это более разумно и разумно, чем кажется. Внутренние строки, содержащие объекты json, передаются нижестоящим системам / подсистемам. Этот API - всего лишь шлюз.   -  person Michael - sqlbot    schedule 10.12.2015


Ответы (1)


Вы пишете значение, если ключ APNS_SANDBOX как строку JSON - было бы лучше также записать это значение как другой словарь, например

var dict = ["default": "default text",
            "APNS_SANDBOX": ["aps": ["sound": "", 
                                     "content-available": "1",
                                     "priority": "5"],            
                 "customparameter": "test"]
           ];
person TheEye    schedule 10.12.2015
comment
Так поступил бы любой разумный человек. Обратите внимание, что это не сгенерирует тот же JSON, что и код вопроса. Таким образом, либо API принимает данные в мусорном формате (когда ожидает словарь, и он получает строку, он снова анализирует строку), либо один из этих кодов не будет работать. - person gnasher729; 10.12.2015
comment
Ваше значение APNS_SANDBOX - это словарь (как и ожидал бы любой разумный человек). Значение APNS_SANDBOX спрашивающего - это строка, содержащая JSON, которая может быть проанализирована в словаре. - person gnasher729; 10.12.2015
comment
Вы правы - строку JSON можно, конечно, снова извлечь из словаря, а затем добавить в окончательный словарь. После ссылки Amazon кажется, что служба Amazon просто берет строковое значение APNS_SANDBOX для создания необходимого JSON для push-уведомлений iOS ... - person TheEye; 10.12.2015
comment
это помогло мне, документация AWS-SNS для iOS ужасна, я не могу вспомнить, где я взял исходный пример, но он работал, поэтому я использовал его до сих пор. - person Toni Nurmi; 10.12.2015
comment
ох, был слишком нетерпелив. Он работал частично, не выдал мне ошибки, но при получении такого же уведомления по умолчанию используется сообщение по умолчанию, а не фактическое содержимое. - person Toni Nurmi; 10.12.2015
comment
См. Комментарий gnasher729 и мой дополнительный комментарий - person TheEye; 10.12.2015