【问题标题】:In iOS How do i parse more than one JSON packet through TCP/IP Server?在 iOS 如何通过 TCP/IP 服务器解析多个 JSON 数据包?
【发布时间】:2019-07-02 05:18:05
【问题描述】:

如何解析多个以空字符结尾的 JSON(通过套接字 TCP/IP)。

{"ObjectID":"UHJvY1dpcmVsZXNzTXNn","DeviceCode":"RUNEOjI=","ActiveInputNames":"Q2hlY2sgaW4gRmFpbA==","DeviceInputNo":"999999","Activation":false,"Reset":true,"LocationID":"","LocationGroupText":"","ProtocolText":"","CallBackNo":"OTE5MTgyNTcyMjQ5"}��{"ObjectID":"VFBpbmdPYmplY3Q="}��

如您所见,上面的响应有 2 个 JSON,每个都以空字符结尾...我可以轻松解析单个 JSON,但无法解析多个 JSON..

如果有人提出任何解决方案,那就太好了!

【问题讨论】:

    标签: ios swift sockets tcp socket.io


    【解决方案1】:

    首先,使用components(separatedBy:) 将两个 JSON 分开,这样我们就可以单独解析它们。

    let str = """
    {"ObjectID":"UHJvY1dpcmVsZXNzTXNn","DeviceCode":"RUNEOjI=","ActiveInputNames":"Q2hlY2sgaW4gRmFpbA==","DeviceInputNo":"999999","Activation":false,"Reset":true,"LocationID":"","LocationGroupText":"","ProtocolText":"","CallBackNo":"OTE5MTgyNTcyMjQ5"}��{"ObjectID":"VFBpbmdPYmplY3Q="}��
    """
    let jsonArr = str.components(separatedBy: "��")
    

    jsonArr 包含 JSON Strings。让我们看看如何解析它们。

    我们将使用 Codable 通过以下 model 解析两个 JSON

    struct Root: Codable {
        let objectID: String
        let deviceCode: String?
        let activeInputNames: String?
        let deviceInputNo: String?
        let activation: Bool?
        let reset: Bool?
        let locationID: String?
        let locationGroupText: String?
        let protocolText: String?
        let callBackNo: String?
    
        enum CodingKeys: String, CodingKey {
            case objectID = "ObjectID"
            case deviceCode = "DeviceCode"
            case activeInputNames = "ActiveInputNames"
            case deviceInputNo = "DeviceInputNo"
            case activation = "Activation"
            case reset = "Reset"
            case locationID = "LocationID"
            case locationGroupText = "LocationGroupText"
            case protocolText = "ProtocolText"
            case callBackNo = "CallBackNo"
        }
    }
    

    解析JSONstrings之类的,

    let parsedObjs = jsonArr.map { (str) -> Root? in
        if let data = str.data(using: .utf8) {
            do {
                let obj = try JSONDecoder().decode(Root.self, from: data)
                return obj
            } catch {
                print(error)
                return nil
            }
        }
        return nil
    }
    

    parsedObjs 将包含 JSON strings 解析的 Root 对象

    如果对此有任何困惑,请告诉我。

    【讨论】:

      【解决方案2】:

      我昨天在 Android 中回答了same question。这是 Swift 版本

      let s = "{\"ObjectID\":\"UHJvY1dpcmVsZXNzTXNn\",\"DeviceCode\":\"RUNEOjI=\",\"ActiveInputNames\":\"Q2hlY2sgaW4gRmFpbA==\",\"DeviceInputNo\":\"999999\",\"Activation\":false,\"Reset\":true,\"LocationID\":\"\",\"LocationGroupText\":\"\",\"ProtocolText\":\"\",\"CallBackNo\":\"OTE5MTgyNTcyMjQ5\"}��{\"ObjectID\":\"VFBpbmdPYmplY3Q=\"}��".components(separatedBy: "��")
      
      
                  for string in s{
                      // do your parsing here
                      print(string)
                  }
      

      您需要做的就是用 �� 拆分字符串,然后就可以开始了。以您以前的方式解析 JSON。

      【讨论】:

        猜你喜欢
        • 2019-11-12
        • 2015-07-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-08-03
        • 2021-05-19
        相关资源
        最近更新 更多