Как преобразовать ответ JSON в формат словаря в Swift - PullRequest
0 голосов
/ 26 апреля 2019

Как преобразовать этот ответ JSON с сотнями ключей в сообщении, чтобы иметь возможность назначить его типу переменной [AnyHashable: Any]

JSON

{
    "content": {
       "message": {
            "greet": "Hello world",
            "error": "There is an error",
            "thanks": "Thank you",
            ...
        }
    }
}

1010 * Попытка *

После того, как я проанализировал JSON, мне не удалось присвоить jsonData переменной, которая принимает [AnyHashable: Any]. Я пытался изменить тип message на [AnyHashable: Any], но он не соответствует Decodable.

// Model.swift

struct TestCase: Decodable {
    let content: Content
}

struct Content: Decodable {
    let message: [String: String]
}


// ViewController.swift

private var testVariable: [AnyHashable: Any]

private func loadJson(filename: String) {
    if let url = Bundle.main.url(forResource: filename, withExtension: "json") {
        do {
            let data = try Data(contentsOf: url)
            let decoder = JSONDecoder()
            let jsonData = try decoder.decode(TestCase.self, from: data)

            // Problem faced
            testVariable = jsonData // error

        } catch let jsonError {
            print("JsonError: ", jsonError)
        }
    }
}

1 Ответ

0 голосов
/ 26 апреля 2019

Вы не можете иметь оба.

Либо вы хотите проанализировать JSON с Decodable, затем вы должны объявить testVariable как

private var testVariable : TestCase?

Или вы хотите оставить testVariable as [AnyHashable: Any], затем удалите структуры и расшифруйте JSON с традиционным JSONSerialization

//print(s)
struct TestCase: Decodable {
    let content: Content
}

struct Content: Decodable {
    let message: [String: String]
}

// ViewController.swift

private var testVariable = [AnyHashable:Any]()

private func loadJson(filename: String) {
    if let url = Bundle.main.url(forResource: filename, withExtension: "json") {
        do {
            let data = try Data(contentsOf: url)
            testVariable = try JSONSerialization.jsonObject(with: data) as? [AnyHashable: Any] ?? [:]

        } catch {
            print("JsonError: ", error)
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...