Быстрое получение и проверка внутреннего (локального) JSON файла - PullRequest
0 голосов
/ 16 июня 2020

Я хочу проверить название города Из местного JSON, если он найден, то массажное шоу «Вы получили это». Но возникла одна проблема: я успешно извлекаю данные из файла, но я знаю, как их сравнить.

Вот мой JSON файл выглядит так:

{
  "data": [
    {
      "zip_code": 55001,
      "latitude": 44.90717,
      "longitude": -92.816193,
      "city": "Afton",
      "state": "MN",
      "county": "Washington"
    },
    {
      "zip_code": 55002,
      "latitude": 45.513447,
      "longitude": -92.894239,
      "city": "Almelund",
      "state": "MN",
      "county": "Chisago"
    }
   ]
}

Код здесь:

func FatchingInformation(){


        do {
            if let file = Bundle.main.url(forResource: "Zone", withExtension: "json") {
                let data = try Data(contentsOf: file)
                let json = try JSONSerialization.jsonObject(with: data, options: [])
                if let object = json as? [String: Any] {
                    // This condition work and Get JSON on Debug Area 
                    print("Obj is ::: \(object)")

                } else if let object = json as? [Any] {
                    // json is an array
                    print("Object is \(object)")
                } else {
                    print("JSON is invalid")
                }
            } else {
                print("no file")
            }
        } catch {
            print(error.localizedDescription)
        }
        }

Ответы [ 2 ]

1 голос
/ 16 июня 2020

вы находитесь в правильном направлении на вашем JSON - это dict массива словаря, вам нужно сначала выполнить итерацию вашего [String: Any], после проверки, что он содержит массив или dict, тогда вам нужно следовать, как показано ниже

              if let object = json as? [String: Any], let objectArray = object["data"] as?  [[String: Any]]  {
                    // do stuff
            for getDictItems in objectArray{
                if let getCityCompare = getDictItems["city"] as? String, !getCityCompare.isEmpty, getCityCompare == "Almelund"{
                     print("city name  is \(getCityCompare)")
                    break
                }
            }
          }
0 голосов
/ 16 июня 2020

Вы можете использовать декодируемую структуру для декодирования json

// MARK: - Address
struct Address: Codable {
    let data: [Datum]
}

// MARK: - Datum
struct Datum: Codable {
    let zipCode: Int
    let latitude, longitude: Double
    let city, state, county: String

    enum CodingKeys: String, CodingKey {
        case zipCode = "zip_code"
        case latitude, longitude, city, state, county
    }
}

let address = try? JSONDecoder().decode(Address.self, from: jsonData)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...