Как получить массив JSON, который впоследствии будет храниться в таблице Realm? - PullRequest
0 голосов
/ 03 февраля 2020

Это часть JSON моего возврата API, я не знаю, как его получить и сохранить в таблице Realm?

 "images": {
                "image1": {
                    "url": "http://www.example.com/900150983cd24fb0d6963f7d28e17f72.gif",
"path": "data/2clb91218/900150983aassfb0d6963f7d28e17f72.gif",
                "alt": "YWJj"
                },
                "image2": {
                    "url": "http://example/tex/fbce4a1ebe576539394e9493e30c7e5e.gif",
"path": "data/2clb91218/900150983cd24fb0d6963f7d28e332g22.gif",
                "alt": "Yaaase22"
                },
                "image3": {
                    "url": "https://example.amazonaws.com/card/480_300/9/9jpul1218.jpg",
    "path": "data/2clb91218/ewfregwrgw6963f7d28e17f72.gif",
                "alt": "pic3"
                }
            }

ПРИМЕЧАНИЕ: Не проверять эти URL Я не хотел ставить реальные.
ПРИМЕЧАНИЕ: В объекте 'Images' имена дочерних объектов изменяются, поэтому мы имеем: 'image1', 'image2' et c.

Я прочитал в Stackoverflow, что для хранения массивов в RealmTable нам нужно использовать не динамически c List <>, поэтому я храню URL-адреса изображений в классе:

var images = List<String>()

Это часть моего ответа JSON Функция, в которой я пытаюсь получить изображения из API, «продолжить» - это просто получить другие объекты, если изображения не могут получить:

guard let images = data["images"] as? [String: Any?],
                     let image = images["image1"] as? [String: String], 
                     let imageUrl = image["url"] as?  String
                 else { print("error") ; continue }

Это выше работает для 'image1', но как насчет других имен изображений, как их обрабатывать? И еще одна проблема - объект «Изображения» может вернуть NIL, если нет изображений, которые также могут произойти. Если это ноль, я хочу поставить "ноль" в столбце RealmTable 'images' типа, который я упомянул выше.
Я надеюсь, что вы можете полностью понять меня, если нет, прокомментируйте, и я постараюсь объяснить лучше.

Ответы [ 2 ]

1 голос
/ 03 февраля 2020

Вам нужно

guard let images = data["images"] as? [String:[String:Any]] else { return }
let res = Array(images.values)
let urls = res.compactMap { $0["url"] as? String }
print("All urls : ",urls)
0 голосов
/ 03 февраля 2020
 var images = List<String>()
 let imagesDictInfo = responseData.toDictionary()
    if let imageArray = imagesDictInfo["Images"] as? [[String:Any]]{
       let imageArrayData = image.getJson()
      //Store this ImageArray into realm or

        for image in imageArray{ 
           let imageData = image.getJson()
           //Store Image Data 
            images.append(imageData)
        }
    }

    func getJson(_ jsonString:String) -> [String:Any]?{
       do{
         let data = jsonString.data(using: .utf8)
          if let json = try? JSONSerialization.jsonObject(with: data!, options: .allowFragments) as? [String:Any] {
                     return json
             }else{
                return nil
             }
         }catch{
             return nil
           }
     }

    func toDictionary() -> NSDictionary {
       let blankDict : NSDictionary = [:]
       if let data = self.data(using: .utf8) {
          do {
             return try JSONSerialization.jsonObject(with: data, options: []) as! NSDictionary
          } catch {
              print(error.localizedDescription)
           }
         }
       return blankDict
   }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...