【问题标题】:How to decode the url about json data?如何解码关于 json 数据的 url?
【发布时间】:2017-07-21 09:41:41
【问题描述】:

我像这样从服务器获取 json 数据。

[
    "http:\/\/helloWord.com\/user\/data\/000001.jpg?1497514193433",
    "http:\/\/helloWord.com\/user\/data\/000002.jpg?1500626693722"
]

我应该怎么做才能获取每个用户的网址?
我尝试使用removingPercentEncoding,但它不起作用。
我该怎么办?
谢谢。

let string:String = chatroom.avatar
let tempArr = string.components(separatedBy: ",")
var stringArr = Array<String>()
print("**tempArr\(tempArr)")

for a in tempArr {

    var b = a.replacingOccurrences(of: "\"", with: "")
    b = b.replacingOccurrences(of: "[", with: "")
    b = b.replacingOccurrences(of: "]", with: "")
    b = b.removingPercentEncoding  //not working!!!!
    print("b: \(b)") 

    //b: http:\/\/helloWord.com\/user\/data\/000001.jpg?1497514193433
    //b: http:\/\/helloWord.com\/user\/data\/000002.jpg?1500626693722

}

我使用 swiftyJson

 class User : Model {

    var url:String = ""

    func fromJson(_ json:JSON) {
       url      = json["url"].zipString
       saveSqlite()
    }
 }

extension JSON {
var prettyString: String {
if let string = rawString() {
  return string
 }
 return ""
}
var zipString: String {
if let string = rawString(.utf8, options: JSONSerialization.WritingOptions.init(rawValue: 0)) {
  return string
 }
  return ""
 }
}

【问题讨论】:

  • 为什么要删除[]?这对我来说似乎是 JSON。为什么不使用 (NS)JSONSerialization ?
  • 因为我解析json并保存我的sqlite,我不知道该怎么做。

标签: ios json swift decode swifty-json


【解决方案1】:

错误,您不应该尝试编写自己的 JSON 解析器。

试试:https://github.com/SwiftyJSON/SwiftyJSON 它是一个 Swift 代码文件,使在 Swift 中使用 JSON 变得更加容易。 在 swift 4 中,您将能够使用 Structs 直接解码,但我们还没有。

苹果之路:

func read(payload: Data) throws -> [String]? {
    guard let result = try JSONSerialization.jsonObject(with: payload, options: JSONSerialization.ReadingOptions.allowFragments) as? [String] else { return nil }
    return result
}

然后例如你可以这样读出它们:

var userURLs: [URL] = []
for jsonURL in result {
    guard let userURL = URL(string: jsonURL) else { continue }
    userURLs.append(userURL)
}

这样您在最后一个结果数组中只获得有效的 URL 对象。

如果您在使用我上面描述的 JSONSerialization 代码时遇到问题,可能是它需要不同的类型。然后你必须使用 [Any] 作为演员,或者如果你有对象 [String: Any] 通常可以工作。请记住,在这种情况下,您必须像这样转换从数组中获取的对象:

URL(string: (jsonURL as? String) ?? "")

Swifty JSON 可以更轻松地处理可空性,因为它提供了一种简单的方法来安全地遍历对象树并返回空但非 nil 值!

【讨论】:

  • 耶!我只是使用 swiftyJson。但我不知道如何解码。
  • JSON(data) JSON(string) 都可以。然后像他们在 github 页面上描述的那样使用该对象。让 json = JSON(数据); json["someField"].stringValue
【解决方案2】:

在我看来,您想使用 removingPercentEncoding 删除转义字符 - 那些反斜杠?而removingPercentEncoding 用于处理编码字符百分比,例如将http%3A%2F%2Fwww.url-encode-decode.com%2F 转换为http://www.url-encode-decode.com/。所以你在错误的地方使用它。确保仅在百分比编码的 URL 上调用此方法。

对于这种情况,就像其他人已经建议的那样,使用JSONSerialization 是要走的路。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-13
    • 2019-08-20
    • 2019-10-21
    相关资源
    最近更新 更多