【问题标题】:Is there a better way to construct JSON syntax when using AWS SNS service?使用 AWS SNS 服务时,是否有更好的方法来构造 JSON 语法?
【发布时间】:2015-12-10 18:40:51
【问题描述】:

我正在使用 AWS Simple Notification Service 在用户设备之间发送推送通知。 SNS 使用 JSON 格式发送远程推送,如下所述: https://github.com/awslabs/aws-sdk-ios-samples/tree/master/SNS-MobileAnalytics-Sample/Swift/#push-notifications-and-track-user-actions

目前,每当我想在设备之间创建新的远程推送时,我都会在 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 的部分难以阅读且容易出错,是否有更易读的方式为 AWS-SNS 服务构建 JSON?

【问题讨论】:

  • dict 包含子字典。所以你可以创建它们,然后将它们插入到 dict 中。
  • 您是否想告诉我们此 API 需要一个带有一个键/值对的 JSON 字典,其中的值是包含可以被解析为 JSON 的文本的字符串?真的吗?
  • @gnasher729 是的,真的,但它比看起来更合理和明智。包含 json 对象的内部字符串正在传递到下游系统/子系统。这个 API 只是网关。

标签: ios json swift amazon-web-services amazon-sns


【解决方案1】:

如果将 APNS_SANDBOX 键作为 JSON 字符串写入值 - 最好将此值也写入另一个字典,例如

var dict = ["default": "default text",
            "APNS_SANDBOX": ["aps": ["sound": "", 
                                     "content-available": "1",
                                     "priority": "5"],            
                 "customparameter": "test"]
           ];

【讨论】:

  • 这就是任何有理智的人都会做的事情。请注意,这将不会生成与提问者代码相同的 JSON。因此,要么 API 接受垃圾格式的数据(当需要字典并获取字符串时,它会再次解析字符串),或者其中一个代码不起作用。
  • 您的“APNS_SANDBOX”值是一个字典(正如任何有理智的人所期望的那样)。提问者的“APNS_SANDBOX”值是一个包含可以解析为字典的 JSON 字符串。
  • 你是对的 - JSON 字符串当然可以再次从字典中派生,然后添加到最终字典中。按照亚马逊链接,亚马逊服务似乎只是采用 APNS_SANDBOX 的字符串值来为 iOS 推送创建必要的 JSON ...
  • 这对我有用,iOS 的 AWS-SNS 文档很糟糕,我不记得我从哪里得到了原始示例,但它确实有效,所以我一直使用它。
  • 哦,有点太急了。它部分工作,没有给我错误,但是当收到相同的通知时,它默认为默认消息而不是实际内容
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-09
  • 1970-01-01
  • 2010-09-15
  • 2011-10-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多