Arşiv

Posts Tagged ‘parse’

swift ile json veri okuma


Merhaba

Bugün JSON bir içeriği Swift ile nasıl okuyacağımıza bakalım. Bu işlemi yapabilmek için önce bize JSON formatında içerik sağlayan https://coinmarketcap.com/api/ adresindeki örnek API leri kullanalım. Bu adreste bize sanal para birimlerinin değerlerini gösteren bir içerik sağlanıyor. Bizde örnek olarak ilk üç sanal para biriminin değerlerini JSON olarak görelim ve sonrasında da Swif ile bu bilgileri nasıl okuyabiliriz ona bakalım. İlk üç sanal para birimi için kullanacağımız API adresi https://api.coinmarketcap.com/v1/ticker/?convert=TRY&limit=3 olacaktır. Bu adresi ziyaret ettiğimizde aşağıdaki gibi JSON içeriğe sahip olacağız.

[
    {
        "id": "bitcoin", 
        "name": "Bitcoin", 
        "symbol": "BTC", 
        "rank": "1", 
        "price_usd": "12931.5", 
        "price_btc": "1.0", 
        "24h_volume_usd": "13119000000.0", 
        "market_cap_usd": "216905222100", 
        "available_supply": "16773400.0", 
        "total_supply": "16773400.0", 
        "max_supply": "21000000.0", 
        "percent_change_1h": "-1.33", 
        "percent_change_24h": "-5.97", 
        "percent_change_7d": "-6.18", 
        "last_updated": "1514712261", 
        "price_try": "49085.2971795", 
        "24h_volume_try": "49797008367.0", 
        "market_cap_try": "823327323711"
    }, 
    {
        "id": "ripple", 
        "name": "Ripple", 
        "symbol": "XRP", 
        "rank": "2", 
        "price_usd": "2.20932", 
        "price_btc": "0.00017298", 
        "24h_volume_usd": "6602400000.0", 
        "market_cap_usd": "85587167493.0", 
        "available_supply": "38739144847.0", 
        "total_supply": "99993093880.0", 
        "max_supply": "100000000000", 
        "percent_change_1h": "0.69", 
        "percent_change_24h": "-11.74", 
        "percent_change_7d": "110.26", 
        "last_updated": "1514712240", 
        "price_try": "8.3861213908", 
        "24h_volume_try": "25061343703.2", 
        "market_cap_try": "324871171261"
    }, 
    {
        "id": "ethereum", 
        "name": "Ethereum", 
        "symbol": "ETH", 
        "rank": "3", 
        "price_usd": "715.561", 
        "price_btc": "0.0560242", 
        "24h_volume_usd": "2839910000.0", 
        "market_cap_usd": "69180310557.0", 
        "available_supply": "96679823.0", 
        "total_supply": "96679823.0", 
        "max_supply": null, 
        "percent_change_1h": "-0.89", 
        "percent_change_24h": "-1.12", 
        "percent_change_7d": "6.02", 
        "last_updated": "1514712248", 
        "price_try": "2716.12143487", 
        "24h_volume_try": "10779710498.6", 
        "market_cap_try": "262594138549"
    }
]

Şimdi yapmamız gereken ise bir proje açıp bu içeriği Swift ile nasıl okuyabileceğimize bakalım. İlk olarak Xcode da bir proje açalım. Aşağıdaki ekran görüntüsündeki sıra ile projemizi oluşturalım ve kodlamaya geçelim.

Artık projemiz hazır. Şimdi projemiz içinde kullanmak ve JSON verimizi modellemek için projemizde bir tane “File > New > File” seçimi ile “Swift File” ekleyelim ve adına “CurrencyModel” diyelim. Bu yeni eklediğimiz dosya içine JSON verimizden kullanmak istediğimiz bilgileri tanımlayalım. Burada dikkat etmemiz gereken konu JSON içinde tanımlı olan isim ve tip bilgisine göre CurrenyModel dosyamızın içinde tanımlama yapmak. Kod içinde de göreceğimiz gibi CurrencyModel:Codable bilgisi bizim için çok önemli ve bu tanımdaki “Codable” bilgisi JSON veriyi kolayca okumamızı sağlıyor. İhtiyacımız olan bilgileri aşağıdaki gibi tanımlayalım.

import Foundation

struct CurrencyModel:Codable {
    var id:String
    var name:String
    var symbol:String
    var rank:String
    var price_usd:String
    var price_btc:String
    var percent_change_1h:String
    var percent_change_24h:String
    var percent_change_7d:String
    var last_updated:String
    var price_try:String
}

JSON verisini okumak için ihtiyacımız olan yapıda hazır olduğuna göre artık veri okumaya başlayalım. Yaptığımız uygulama içinde sadece veri okuması yapılacak ve console üzerinde bu değerleri göreceğiz. İsterseniz bu bilgileri kullanıp uygulama üzerinde görsel olarak da gösterebilirsiniz. Aşağıdaki kodumuz ile JSON dan veriyi okuduk ve console ekranımıza dump olarak yazdırdık.

import UIKit

let myApiUrl = "https://api.coinmarketcap.com/v1/ticker/?convert=TRY&limit=3"
let url = URL(string: myApiUrl)!
let myJSONData = try! Data(contentsOf: url)
var jsonDecoder = JSONDecoder()

class ViewController: UIViewController {
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        let currencies = try? jsonDecoder.decode([CurrencyModel].self, from: myJSONData)
        if let currency = currencies{
            
            for c in currency{
                dump(c)
            }
        }   
    }
}

Yukarıdaki kod ile çıkan veride bulunan last_updated bilgisi Unix Time Stamp bilgisidir ve bu bilginin normal bir tarih formatında görünmesi için kodda aşağıdaki gibi bir düzenleme yapmamız gerekiyor.

import UIKit

let myApiUrl = "https://api.coinmarketcap.com/v1/ticker/?convert=TRY&limit=3"
let url = URL(string: myApiUrl)!
let myJSONData = try! Data(contentsOf: url)
var jsonDecoder = JSONDecoder()

class ViewController: UIViewController {
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        let currencies = try? jsonDecoder.decode([CurrencyModel].self, from: myJSONData)
        if let currency = currencies{
            
            for c in currency{
                dump(c)
                let lastUpdateUTC = Date(timeIntervalSince1970: TimeInterval(Int(c.last_updated)!))
                let dateFormatter = DateFormatter()
                dateFormatter.dateFormat = "dd-MM-YYYY hh:mm:ss a"
                let lastUpdateLocal = dateFormatter.string(from: lastUpdateUTC)
                print("Son Güncelleme UTC:" + String(describing: lastUpdateUTC))
                print("Son Güncelleme Local:" + String(describing: lastUpdateLocal))
            }
        }
    }
}

Artık bu kod çalıştığında sadece sayısal bir bilgi olan last_update bilgisi gerekli çevrim işleminden sonra tarih formatında görebiliyoruz.

▿ Swif_JSON.CurrencyModel
  - id: "bitcoin"
  - name: "Bitcoin"
  - symbol: "BTC"
  - rank: "1"
  - price_usd: "12902.4"
  - price_btc: "1.0"
  - percent_change_1h: "-0.39"
  - percent_change_24h: "-5.59"
  - percent_change_7d: "-6.05"
  - last_updated: "1514715260"
  - price_try: "48974.8396032"
Son Güncelleme UTC:2017-12-31 10:14:20 +0000
Son Güncelleme Local:31-12-2017 01:14:20 PM
▿ Swif_JSON.CurrencyModel
  - id: "ripple"
  - name: "Ripple"
  - symbol: "XRP"
  - rank: "2"
  - price_usd: "2.21301"
  - price_btc: "0.00017297"
  - percent_change_1h: "-0.4"
  - percent_change_24h: "-9.59"
  - percent_change_7d: "112.55"
  - last_updated: "1514715241"
  - price_try: "8.4001278669"
Son Güncelleme UTC:2017-12-31 10:14:01 +0000
Son Güncelleme Local:31-12-2017 01:14:01 PM
▿ Swif_JSON.CurrencyModel
  - id: "ethereum"
  - name: "Ethereum"
  - symbol: "ETH"
  - rank: "3"
  - price_usd: "714.06"
  - price_btc: "0.0558108"
  - percent_change_1h: "-0.31"
  - percent_change_24h: "-1.29"
  - percent_change_7d: "6.17"
  - last_updated: "1514715249"
  - price_try: "2710.42394958"
Son Güncelleme UTC:2017-12-31 10:14:09 +0000
Son Güncelleme Local:31-12-2017 01:14:09 PM

Bu şekilde bir JSON bilgisini Swift ile okuma işlemini yaptık ve sonuçlarını gördük. Projenin kaynak kodlarına üzerinden ulaşabilirsiniz.
Kolay gelsin.

Kategoriler:iOS Etiketler:, , , , ,

pl/sql dbms_sql kullanımı


PL/SQL de dbms_sql kullanımı için hazırlanmış basit bir örnek. bu işlem işle istenildiği gibi sql string oluşturulup sorgulama sonucu istenilen değişkenlere atılabilinir.

DECLARE
  sql_string  VARCHAR2(5000);
  dbms_cursor NUMBER;
  valuee      NUMBER := 2;
  col_1       NUMBER;
  col_2       NUMBER;
  col_3       NUMBER;
  ignore      NUMBER;
BEGIN

  sql_string := 'Select colum_1,colum_2,colum_3 from table where colum_1=' || variable_1 || ' and colum_2=' || variable_2;

  dbms_cursor := dbms_sql.open_cursor;
  dbms_sql.parse(dbms_cursor, sql_string, valuee);
  ignore := dbms_sql.execute(dbms_cursor);

  dbms_sql.define_column(dbms_cursor, 1, col_1);
  dbms_sql.define_column(dbms_cursor, 2, col_2);
  dbms_sql.define_column(dbms_cursor, 3, col_3);

  WHILE dbms_sql.fetch_rows(dbms_cursor) > 0 LOOP
    dbms_sql.column_value(dbms_cursor, 1, col_1);
    dbms_sql.column_value(dbms_cursor, 2, col_2);
    dbms_sql.column_value(dbms_cursor, 3, col_3);
    dbms_output.put_line(col_1 || '-' || col_2 || '-' || col_3);
  END LOOP;

  dbms_sql.close_cursor(dbms_cursor);

END;