【问题标题】:Converting string (Contains json string) to NSURL in swift快速将字符串(包含 json 字符串)转换为 NSURL
【发布时间】:2018-10-16 22:52:24
【问题描述】:

我有PAI 它在.NET 中实现。

其中一个web服务的url是这样的

http://123.321.33/UploadCitizenImage?jsonString={\"Mobile\":\"12345678\", \"fileName\":\"7661832460_05072018.png\"} 

在将上述字符串转换为swift 中的 URL 时,应用程序将转到crash。

更多信息请查看此

【问题讨论】:

标签: ios swift


【解决方案1】:

你可以试试这个,

let string = "http://123.321.33/UploadCitizenImage?jsonString={\"Mobile\":\"12345678\", \"fileName\":\"7661832460_05072018.png\"}"
let escapedString = string.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed)
let url = URL(string: escapedString!)!
print(url)

输出会是这样的,

http://123.321.33/UploadCitizenImage?jsonString=%7B%22Mobile%22:%2212345678%22,%20%22fileName%22:%227661832460_05072018.png%22%7D

【讨论】:

    【解决方案2】:

    URL(string:) 初始化器返回一个可选,因为字符串的解析可能会失败。在这种情况下,将返回 nil。这正是这里发生的情况,因为您提供的字符串不是有效的 URL:查询中有几个字符是不允许的,需要替换:{ as %7B, " as %22 , 空格为%20 和} 为%7D。

    所以初始化器返回nil。接下来您要做的是通过! 运算符强制展开。但是强制解开 nil 是非法的,这就是导致崩溃的原因。

    如果你想创建一个 URL,请查看 URLComponents 类,它会为你完成所有必要的转义,所以你不需要关心它。 queryItems 属性是您特别感兴趣的,它是 URLQueryItem 的数组。

    【讨论】:

      【解决方案3】:

      请做类似的事情,

      let jsonString = "jsonString={\"Mobile\":\"12345678\", \"fileName\":\"7661832460_05072018.png\"}" as String
      let urlEncoadedJson = jsonString.addingPercentEncoding(withAllowedCharacters:.urlHostAllowed)
      let urls = NSURL(string:"http://123.321.33/UploadCitizenImage?\(urlEncoadedJson ?? "")")
      

      首先将您的 json 转换为 encodedJson,然后添加到您的 url。 如果有什么问题,请告诉我。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-07-29
        • 1970-01-01
        • 2015-04-04
        • 2015-06-19
        • 2020-01-13
        • 2015-04-09
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多