Jak filtrovat JSON a získat hodnotu v iOS Swift?

0

Otázka

Snažím se filtrovat JSON a získat klíč a hodnoty analyzovat. Zde všechny JSON hodnoty jsou dynamické. Teď musím najít "typ = objekt", pokud typ našel, je pravda, pak musím zkontrolovat hodnotu ={"contentType" a "URL"}.

tady je můj syn:

{
"date": {
    "type": "String",
    "value": "03/04/1982",
    "valueInfo": {}
},
"Scanner": {
    "type": "Object",
    "value": "{\"contentType\":\"image/jpeg\",\"url\":\"https://www.pexels.com/photo/neon-advertisement-on-library-glass-wall-9832438/",\"fileName\”:\”sample.jpeg\"}",
    "valueInfo": {
        "objectTypeName": "com.google.gson.JsonObject",
        "serializationDataFormat": "application/json"
    }
},
"startedBy": {
    "type": "String",
    "value": "super",
    "valueInfo": {}
},
"name": {
    "type": "String",
    "value": “kucoin”,
    "valueInfo": {}
},
"ScannerDetails": {
    "type": "Json",
    "value": "{\"accountNumber\":\"ANRPM2537J\",\"dob\":\"03/04/1982\",\"fathersName\":\"VASUDEV MAHTO\",\"name\":\"PRAMOD KUMAR MAHTO\"}",
    "valueInfo": {}
}

}

Jak se dostat konkrétní hodnoty z JSON? Jakákoliv pomoc je velmi ceněn pls...

alamofire json swift xcode
2021-10-25 04:14:20
1
0

Zde je kód, od mýho hřiště s json vzorku:

import Foundation

let json = """
{
    "date": {
        "type": "String",
        "value": "03/04/1982",
        "valueInfo": {}
    },
    "Scanner": {
        "type": "Object",
        "value": {
            "contentType": "image/jpeg ",
            "url": "https://www.pexels.com/photo/neon-advertisement-on-library-glass-wall-9832438/",
            "fileName": "sample.jpeg"
        },
        "valueInfo": {
            "objectTypeName": "com.google.gson.JsonObject",
            "serializationDataFormat": "application/json"
        }
    },
    "startedBy": {
        "type": "String",
        "value": "super",
        "valueInfo": {}
    },
    "name": {
        "type": "String",
        "value": "kucoin",
        "valueInfo": {}
    },
    "ScannerDetails": {
        "type": "Json",
        "value": {
            "accountNumber": "ANRPM2537J",
            "dob": "03/04/1982",
            "fathersName": "VASUDEV MAHTO",
            "name": "PRAMOD KUMAR MAHTO"
        },
        "valueInfo": {}
    }
}
"""

let data = json.data(using: .utf8, allowLossyConversion: false)!

struct ObjectScanner: Decodable {
    let contentType: String
    let url: String
    let fileName: String
}

enum ObjectScannerType {
    case object(ObjectScanner)
}

struct Scanner: Decodable {
    enum ScannerType: String, Decodable {
        case object = "Object"
    }

    enum CodingKeys: String, CodingKey {
        case type, value
    }

    let scanner: ObjectScannerType

    init(from decoder: Decoder) throws {
        let container = try decoder.container(keyedBy: CodingKeys.self)
        let type = try container.decode(ScannerType.self, forKey: .type)

        switch type {
        case .object:
            let value = try container.decode(ObjectScanner.self, forKey: .value)
            scanner = .object(value)
        }
    }
}

struct DateResponse: Decodable {
    let type: String
    let value: String
    // let valueInfo // Not enough information in sample for me to decode this object
}

struct Response: Decodable {
    enum CodingKeys: String, CodingKey {
        case date
        case scanner = "Scanner"
    }

    let date: DateResponse
    let scanner: Scanner
}

let decoder = JSONDecoder()

do {
    let response = try decoder.decode(Response.self, from: data)
    print(response)
} catch {
    print("Error decoding: \(error.localizedDescription)")
}

Poznámka: tento příklad je velmi nemilosrdné. Všechny chybějící hodnoty nebo typ, který není podporován, bude to vést k DecodingError. Je to jen na vás, zjistit všechny možné typy, a to, co je povinné a co ne.

Také jsem nevěděla, dekódovat všechno ani nechci zvládnout date objekt je naplno

To je jako json jde o velmi složitý příklad. Všechno, co v něm je polymorfní: date, Scanner, ScannerDetailsatd. Musíte být velmi opatrní, jak to dekódovat, a ujistěte se, že zvládnout všechny možnosti. Já bych naznačují, že pokud začínáte, měli byste prozkoumat jednodušší příklady.

Také jsem se rozhodla použít výčtové typy. Není to něco, co každý by si vybral, ale jeho moje preference pro dekódování polymorfní typy, jako jsou tyto.

Můžete si přečíst můj článek o jednání s polymorfní typy, stejně jako neznámé typy zde: https://medium.com/@jacob.sikorski/awesome-uses-of-swift-enums-2ff011a3b5a5

2021-10-27 02:55:42

V jiných jazycích

Tato stránka je v jiných jazycích

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................