Как отобразить и отфильтровать словарь вложенных данных JSON ниже определенного числа? - PullRequest
0 голосов
/ 05 июня 2019

У меня есть статический файл JSON, и я успешно декодирую его обратно. Тем не менее, я действительно изо всех сил стараюсь сохранить его правильно, так как он вложен в несколько слоев. В данный момент консоль распечатывает ["Hamilton", "Chermside", "Coorparoo"]

Однако мне нужно, чтобы он фильтровал и возвращал значения в каждом пригороде, которые подпадают под 500000. Поэтому что-то вроде этого было бы замечательно.

"Hamilton" "oneBRU": 341000, "twoBRU": 480000

"Chermside" "oneBRU": 320000, "twoBRU": 255000, "threeBRU": 435000, "twoBRH": 400000

Статический файл JSON находится внизу. Большое спасибо

var suburbsJson: [Suburb] = []

struct ResponseData: Codable {
    var suburbs: [Suburb]
}

struct Suburb : Codable {
    var _id: Int
    var name: String
    var postcode: Int
    var prices: SuburbPrices
}

struct SuburbPrices: Codable    {
    let oneBRU: Int
    let twoBRU: Int
    let threeBRU: Int
    let twoBRH: Int
    let threeBRH: Int
    let fourBRH: Int
}

func loadJson(filename fileName: String) -> [Suburb]? {
    if let url = Bundle.main.url(forResource: fileName, withExtension: "json") {
        do {
            let data = try Data(contentsOf: url)
            let decoder = JSONDecoder()
            let jsonData = try decoder.decode(ResponseData.self, from: data)
            self.suburbsJson = jsonData.suburbs

            let suburb = suburbsJson.map { $0.name }
            print(suburb)

            // print only suburbs below 500000



            return jsonData.suburbs
        } catch {
            print("error:\(error)")
        }
    }
    return nil
}

ФАЙЛ JSON

{
"suburbs": [
    {
        "_id": 1,
        "name": "Hamilton",
        "postcode": 4007,
        "prices":
            {
                "oneBRU": 341000,
                "twoBRU": 480000,
                "threeBRU": 880000,
                "twoBRH": 555000,
                "threeBRH": 945000,
                "fourBRH": 1200000
            }
    },
    {
        "_id": 2,
        "name": "Chermside",
        "postcode": 4032,
        "prices":
        {
            "oneBRU": 320000,
            "twoBRU": 255000,
            "threeBRU": 435000,
            "twoBRH": 400000,
            "threeBRH": 585000,
            "fourBRH": 860000
        }
    },
    {
        "_id": 3,
        "name": "Coorparoo",
        "postcode": 4151,
        "prices":
        {
            "oneBRU": 323000,
            "twoBRU": 359750,
            "threeBRU": 535000,
            "twoBRH": 500000,
            "threeBRH": 750000,
            "fourBRH": 970000
        }
    }
]
}

1 Ответ

0 голосов
/ 05 июня 2019

Если вам просто нужно напечатать значения, вы можете сделать что-то вроде этого:

func loadJson(filename fileName: String) -> [Suburb]? {
    if let url = Bundle.main.url(forResource: fileName, withExtension: "json") {
        do {
            let data = try Data(contentsOf: url)
            let decoder = JSONDecoder()
            let jsonData = try decoder.decode(ResponseData.self, from: data)
            self.suburbsJson = jsonData.suburbs

            // print only suburbs below 500000
            jsonData.suburbs.forEach { suburb in
                print(suburb.name)
                if suburb.prices.oneBRU < 500000 {
                    print("One BRU: \(suburb.prices.oneBRU)")
                }
                if suburb.prices.twoBRU < 500000 {
                    print("Two BRU: \(suburb.prices.twoBRU)")
                }
                if suburb.prices.threeBRU < 500000 {
                    print("Three BRU: \(suburb.prices.threeBRU)")
                }
                if suburb.prices.twoBRH < 500000 {
                    print("Two BRH: \(suburb.prices.twoBRH)")
                }
                if suburb.prices.threeBRH < 500000 {
                    print("Three BRH: \(suburb.prices.threeBRH)")
                }
                if suburb.prices.fourBRH < 500000 {
                    print("Four BRH: \(suburb.prices.fourBRH)")
                }
            }
            return jsonData.suburbs
        } catch {
            print("error:\(error)")
        }
    }
    return nil
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...