В iOS Как мне проанализировать более одного пакета JSON через TCP / IP Server? - PullRequest
0 голосов
/ 02 июля 2019

Как проанализировать более одного 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 ..

Было бы замечательно, если бы кто-нибудь предложил какие-либо решения !!

Ответы [ 2 ]

0 голосов
/ 02 июля 2019

Прежде всего разделите оба JSON с помощью components(separatedBy:), чтобы мы могли проанализировать их по отдельности.

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, чтобы проанализировать оба 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"
    }
}

Parse JSON строк типа

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 будет содержать анализ Root объектов для обоих JSON strings.

Дайте мне знать, если в этом есть какая-то путаница.

0 голосов
/ 02 июля 2019

Я ответил на тот же вопрос в Android вчера. Вот версия 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, как вы привыкли.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...