синтаксический анализ json с localhost на Xcode не работает - PullRequest
0 голосов
/ 22 октября 2019

Я пытался проанализировать мой результат json с моего локального хоста в Xcode. Тем не менее, мой результат JSON, кажется, правильно отформатирован. Я также создал запрос для преобразования моего результата в json из phpmyAdmin. Выглядит хорошо, но я не знаю, связана ли моя проблема с этим кодом.

У меня есть только два столбца (имя и зарплата) в моей базе данных (Person). результат выглядит как массив словарей.

[{"name":"Isaac","salary":"2000"},{"name":"David","salary":"7000"}]

Я скопировал это и вставил в валидатор json, и он был помечен как действительный.

приходит в мой код, который анализирует результат json вxcode:

указанный код печатает ноль 142 байта. Кажется, проблема в этой строке.

let iphoneinfos =  try? JSONDecoder().decode([Iphoneinfo].self, from: data)

любая помощь будет оценена.

import UIKit
struct Iphoneinfo: Codable
{
    let name : String
    let salary : Int
}


class ViewController: UIViewController {
override func viewDidLoad() {
    super.viewDidLoad()
    let url = URL(string: "http://localhost/xcodeprojectDB/sql_to_json.php")!

    URLSession.shared.dataTask(with: url)
    { data, response, error in

        if let data = data {
            let iphoneinfos =  try? JSONDecoder().decode([Iphoneinfo].self, from: data)
            print(iphoneinfos)
            print(data)
        }

    }
    .resume()

}
}

1 Ответ

0 голосов
/ 22 октября 2019

В приведенном ниже ответе JSON ,

[{"name":"Isaac","salary":"2000"},{"name":"David","salary":"7000"}]

значение "salary" равно String, а не Int.

Итак, в вашем struct Iphoneinfo, salary должен быть тип String вместо Int, то есть

struct Iphoneinfo: Codable {
    let name : String
    let salary : String
}

И в случае, если вы хотите использовать Int для salary, вы должны либо написать пользовательский init(from:), либо изменить формат JSON.

Редактировать:

При использовании того же JSON, который вы указали, вотрезультат, который вы получите после синтаксического анализа с использованием struct Iphoneinfo

let str = """
[{"name":"Isaac","salary":"2000"},{"name":"David","salary":"7000"}]
"""
if let data = str.data(using: .utf8) {
    do {
        let response = try JSONDecoder().decode([Iphoneinfo].self, from: data)
        print(response) //[Iphoneinfo(name: "Isaac", salary: "2000"), Iphoneinfo(name: "David", salary: "7000")]
    } catch {
        print(error)
    }
}

Если вы все еще не решите проблему, должна быть некоторая проблема с API или полученным ответом.

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