JSON DATA
{
"items": [
{
"Fid": 135,
"Fname": "??, ???",
"Hits": null,
"Delegate_Image": "None"},
{
"Fid": 136,
"Fname": "??, ???",
"Hits": null,
"Delegate_Image": "./pic_data/2305/20180423201345FB"},
{
"Fid": 137,
"Fname": "??",
"Hits": null,
"Delegate_Image": "None"},
{
"Fid": 138,
"Fname": "??",
"Hits": null,
"Delegate_Image": "None"},
{
"Fid": 139,
"Fname": "??, ??",
"Hits": null,
"Delegate_Image": "None"},
{
"Fid": 140,
"Fname": "???",
"Hits": null,
"Delegate_Image": "./pic_data/2309/20180423201954alj"},
{
"Fid": 141,
"Fname": "??, ???",
"Hits": null,
"Delegate_Image": "None"},
{
"Fid": 142,
"Fname": "??, ??",
"Hits": null,
"Delegate_Image": "None"},
{
"Fid": 143,
"Fname": "??, ????, ??",
"Hits": null,
"Delegate_Image": "None"},
{
"Fid": 144,
"Fname": "?? ??",
"Hits": null,
"Delegate_Image": "None"},
{
"Fid": 145,
"Fname": "???, ???",
"Hits": null,
"Delegate_Image": "None"},
{
"Fid": 146,
"Fname": "?, ??",
"Hits": null,
"Delegate_Image": "None"},
{
"Fid": 147,
"Fname": "?, ?????",
"Hits": null,
"Delegate_Image": "None"},
{
"Fid": 148,
"Fname": "?, ???",
"Hits": null,
"Delegate_Image": "None"},
{
"Fid": 149,
"Fname": "?, ?????",
"Hits": null,
"Delegate_Image": "None"},
{
"Fid": 150,
"Fname": "?, ????",
"Hits": null,
"Delegate_Image": "None"},
{
"Fid": 151,
"Fname": "?, ???",
"Hits": null,
"Delegate_Image": "None"},
{
"Fid": 152,
"Fname": "?, ????",
"Hits": null,
"Delegate_Image": "None"},
{
"Fid": 153,
"Fname": "?, ?????",
"Hits": null,
"Delegate_Image": "./pic_data/2322/20180423204239acceptimgjpgjses"},
{
"Fid": 154,
"Fname": "?, ???? ",
"Hits": null,
"Delegate_Image": "None"},
{
"Fid": 155,
"Fname": "?, ????",
"Hits": null,
"Delegate_Image": "./pic_data/2324/20180423204428BBjpg"},
{
"Fid": 156,
"Fname": "?, ??",
"Hits": null,
"Delegate_Image": "None"},
{
"Fid": 157,
"Fname": "?, ???",
"Hits": null,
"Delegate_Image": "./pic_data/2326/20180423204715DBEC"},
{
"Fid": 158,
"Fname": "??",
"Hits": null,
"Delegate_Image": "None"},
{
"Fid": 159,
"Fname": "??, ??",
"Hits": null,
"Delegate_Image": "./pic_data/2328/20180423204919dedbd"},
{
"Fid": 160,
"Fname": "??, ??",
"Hits": null,
"Delegate_Image": "./pic_data/2329/20180423204927fefejpg"}
]
}
Swift4 CODE
enum BackendError: Error {
case urlError(reason: String)
case objectSerialization(reason: String)
}
struct Food: Codable {
let Fid: Int
let Fname: String
let Hits: Int
let Delegate_Image: String
}
struct SUPERFOOD: Codable {
let Food: Food
}
class ViewController: UIViewController {
let URL_GET_TEAMS:String = "http://jsm0803.iptime.org:81/html/sufoo/getteams.php"override func viewDidLoad() {
super.viewDidLoad()
getTodo(0)
}
static func foodByID(_ id: Int, completionHandler: @escaping (Food?, Error?) -> Void)
{
let URL_GET_TEAMS:String = "JSON DATA; It's my server address"guard let url = URL(string: URL_GET_TEAMS) else { // 데이터 서버 연결
print("Error: cannot create URL")
let error = BackendError.urlError(reason: "Could not create URL")
completionHandler(nil, error)
return
}
let urlRequest = URLRequest(url: url)
let session = URLSession.shared
let task = session.dataTask(with: urlRequest, completionHandler: {
(data, response, error) in
guard let responseData = data else
{
print("Error: did not receive data")
let error = BackendError.objectSerialization(reason: "No data in response")
completionHandler(nil, error)
return
}
guard error == nil else {
completionHandler(nil, error!)
return
}
print ("JSON data: ", responseData)
print ("JSON data: ", type(of: responseData))
let decoder = JSONDecoder()
do {
let item = try decoder.decode([Food].self, from: responseData) // 받은 데이터를 디코더로 해석
for i in item{
completionHandler(i, nil)
}
} catch {
print("error trying to convert data to JSON")
print(error)
completionHandler(nil, error)
}
})
task.resume()
}
func getTodo(_ idNumber: Int) {
ViewController.foodByID(idNumber, completionHandler: { (food, error) in
if let error = error {
// got an error in getting the data, need to handle it
print("DATA MISSING ERROR: ", error)
return
}
guard let food = food else {
print("error getting first todo: result is nil")
return
}
// success :)
debugPrint(food)
print(food.Fname)
})
}
}
Я пытаюсь загрузить JSON DATA с моего сервера, но он много раз терпел неудачу. Я не мог найти решение для моей проблемы.
Пожалуйста, помогите мне решить это.
огромное спасибо
Сообщения об ошибках ниже:
ошибка при попытке преобразовать данные в JSON
dataCorrupted (Swift.DecodingError.Context (codingPath: [],
debugDescription: «Указанные данные не были действительными в формате JSON.»,
underError: Необязательно (Ошибка домена = NSCocoaErrorDomain Code = 3840
«JSON-текст не начинался с массива или объекта и опции, позволяющей
фрагменты не заданы. «UserInfo = {NSDebugDescription = текст JSON не задан
начать с массива или объекта и опции, чтобы разрешить фрагменты не установлены.})))ОШИБКА Пропущенных данных:
dataCorrupted (Swift.DecodingError.Context (codingPath: [],
debugDescription: «Указанные данные не были действительными в формате JSON.»,
underError: Необязательно (Ошибка домена = NSCocoaErrorDomain Code = 3840
«JSON-текст не начинался с массива или объекта и опции, позволяющей
фрагменты не заданы. «UserInfo = {NSDebugDescription = текст JSON не задан
начать с массива или объекта и опции, чтобы разрешить фрагменты не установлены.})))
Задача ещё не решена.
Других решений пока нет …