Разобрать данные JSON в Swift - PullRequest
0 голосов
/ 07 мая 2018

Я пытаюсь решить проблему, в которой я застрял.
Моя база данных проекта присваивает один parentId каждому родителю, который может иметь несколько childId для своих детей.
После входа в приложение iOS должно отображаться все childId, связанное с parentId.
Моя база данных:

ParentID    ChildID    Name        Class
   10          45       Andrew        4
   10          46       Sarah         8
   11          47       Mark          2
   12          48       Claire        4

Мне удалось создать строку JSON для этой информации, если parentId вставлен в форму PHP, для parentId = 10:

[{"childId":45,"name":"Andrew","class":"4"},{"childId":46,"name":"Sarah","class":"8"}]}

Однако я не очень хорошо разбираю эти данные в нашем приложении для iOS, чтобы родитель мог видеть свои дочерние идентификаторы

Мой код Swift пока что, очевидно, не помогает! (Я использую Alamofire для своей сети iOS)

let URL_CHILD_DEVICE = "http://localhost/test/dashDevice.php"

//the defaultvalues to store data
let defaultValues = UserDefaults.standard

override func viewDidLoad() {
    super.viewDidLoad()
    if let name = defaultValues.string(forKey: "parentId") {
        labelParentId.text = pname
    }
    Alamofire.request(URL_CHILD_DEVICE, method: .get).responseJSON {
        response in
        if response.data != nil {
            let json = JSON(data: response.data!)
            let name = json["name"][0]["class"].string
            if name != nil {
                print(name!)
            }
        }
    }
 }

1 Ответ

0 голосов
/ 07 мая 2018

Это действительно просто с протоколом Codable (см. Дополнительную информацию здесь и здесь ). Во-первых, вам нужно создать структуру, представляющую вашу модель:

struct Person: Codable {
    let parentId: Int  // Or String. Not sure from your data.
    let childId: Int
    let name: String
    let `class`: Int  // This could be an enum.
}

Соответствие Codable позволит компилятору генерировать методы кодирования / декодирования, необходимые для анализа JSON. Осталось только попытаться разобрать его в ответе вашей сети.

Alamofire.request(URL_CHILD_DEVICE, method: .get).responseJSON { response in
    if let data = response.data {
        do {
            let person = try JSONDecoder().decode(Person.self, from: data)
            print(person.name)
        } catch {
            // handle errors
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...