如何在 swift 2 中解析和显示 JSON?

Posted

技术标签:

【中文标题】如何在 swift 2 中解析和显示 JSON?【英文标题】:How to parse and display JSON in swift 2? 【发布时间】:2016-02-17 08:46:05 【问题描述】:

我正在尝试构建一个可以使用 JSON 获取和显示信息的应用程序。 目前,我可以在我的 viewdidload 中使用此代码在调试区域中打印 JSON 内容:

 var url = NSURL(string: "http://myjsonlocation.php")        
    if url != nil 
        let task = NSURLSession.sharedSession().dataTaskWithURL(url!, completionHandler:  (data, response, error) -> Void in
            print(data)


            if error == nil 

                var urlContent = NSString(data: data!, encoding: NSASCIIStringEncoding) as NSString!

                print(urlContent)

            
        )
        task.resume()

这是json的内容:

 
 "playlist": [

  "id": "",
  "nama": "",
  "penyanyi": ""
,

  "id": "***",
  "nama": "PENIPUAN MENGATASNAMAKAN PT TASPEN (PERSERO)",
  "penyanyi": "PT TASPEN (PERSERO) tidak pernah membagikan deviden. Apabila ada oknum yang mengatasnamakan PT TASPEN (PERSERO) dengan menjanjikan akan membagikan deviden atau hal lainnya diluar ketentuan, itu tidak benar (PENIPUAN)"
,

  "id": "***",
  "nama": "JALIN KERJA SAMA LAYANAN PEMBAYARAN PENSIUN, TASPEN GANDENG BANK YUDHA BAKTI",
  "penyanyi": "PT TASPEN (PERSERO) jalin kerjasama dengan PT Bank Yudha Bhakti dalam membayarkan THT, THT Multiguna, dan Pensiun kepada peserta Taspen. Kerjasama ini diharapkan dapat menambah titik layanan kepada peserta terutama dalam memberikan pilihan bagi peserta dalam memilih kantor bayar. "
,

  "id": "***",
  "nama": "MENUJU PERUBAHAN MELALUI TASPEN EXECUTIVE MEETING",
  "penyanyi": "Dalam rangka meningkatkan kompetensi SDM, selama 3 hari seluruh jajaran direksi, kepala divisi, kepala desk dan kepala unit di kantor pusat beserta para kepala kantor cabang Taspen seluruh Indonesia berkumpul di Rumah Perubahan Rhenald Kasali. Mengusung tema Perubahan, peserta mengikuti rangkaian kegiatan yang ada. Dimulai dengan myelin based outbond, peserta kegiatan dibagi menjadi 6 kelompok, mengikuti permainan group yang mengedepankan kerja sama tim dalam persaingan antar tim yang kompetitif. Selesai rangkaian outbond, kegiatan berlanjut pada acara pembukaan Taspen Executive Meeting oleh Direktur Utama PT TASPEN (PERSERO), Iqbal Latanro. "
,

  "id": "***",
  "nama": "TASPEN BUKA KANTOR CABANG KE-53 DI LHOKSEUMAWE",
  "penyanyi": "Dalam rangka meningkatkan kualitas layanan dengan mendekatkan diri kepada peserta, Taspen kembali meresmikan Kantor Cabangnya yang ke-53. Kantor Cabang yang berlokasi di Jalan Merdeka Kota, Lhokseumawe, diresmikan secara langsung oleh Walikota Lhokseumawe, Suaidi Yahya bersama Direktur Utama PT TASPEN (PERSERO), Iqbal Latanro. Dengan dibukanya Kantor Cabang baru ini, peserta tidak perlu jauh-jauh untuk datang ke Kantor Cabang Banda Aceh. Suadi Yahya, selaku Walikota Lhokseumawe berkenan meresmikan Kantor Cabang yang ke-53 ini, dengan penuh rasa syukur dan bangga. Seperti yang disampaikan beliau dalam pidato sambutannya. Rasa syukur karena kota Lhokseumawe terpilih sebagai kota dimana cabang Taspen ini berdiri yang berada dalam cakupan layanan di wilayah Nangroe Aceh Darussalam. Kini, peserta yang berada di wilayah Kabupaten Aceh Tengah, Aceh Utara, Aceh Timur, Aceh Tenggara, Bireuen, Gayo Lues, Aceh Tamiang, Bener Meriah, Kota Langsa, dan Kota Lhokseumawe dapat langsung menuju ke Kantor Cabang Lhokseumawe untuk mengurus klimnya."
,

  "id": "***",
  "nama": "BUPATI ENDE RESMIKAN KANTOR CABANG TASPEN DI ENDE",
  "penyanyi": "Ende, 19 Januari 2016, PT TASPEN (PERSERO) Kantor Cabang Ende yang ke 52 kini hadir di Jalan Pahlawan No. 20 Kelurahan kota Raja Kecamatan Ende Utara, beroperasi mulai 1 Januari 2016 dan peresmiannya dilaksanakan Selasa 19 Januari 2016 oleh Bupati Ende Ir. Marselinus Y.W Petu dan Direktur Utama PT Taspen (Persero) Iqbal Latanro. Dalam sambutannya, Direktur Utama menjelaskan dengan dibukanya Kantor Taspen Cabang Ende adalah mewujudkan upaya Taspen mendekatkan layanannya dengan peserta. Dengan berbagai inovasi layanan yang ada yaitu melalui pembukaan kantor cabang baru seperti yang terlaksana di Ende, layanan klim otomatis, mobil layanan Taspen, office channeling, service point, call center Taspen, dan Taspen Mobile Application for Smartphone, Taspen berupaya untuk memberikan kenyamanan dan kemudahan bagi peserta dalam mengakses layanan yang ada."

]

在我的应用程序中解析和显示 JSON 内容的最佳方式是什么? (JSON 的内容是关于最近的新闻) 我正在使用 Xcode 7 和 swift 2.0

【问题讨论】:

看看这个:google.es/… 【参考方案1】:

有一个名为 SwiftyJSON 的出色库,专门用于处理 JSON。 https://github.com/SwiftyJSON/SwiftyJSON

对于您的问题,假设您想在“index”处获取播放列表的 id(假设它是 int)

  let jsonData = JSON(data)
  print (jsonData["playlist"][index]["id"].intValue) // index refers to the list index

【讨论】:

【参考方案2】:

使用NSJSONSerialization

public class func JSONObjectWithData(data: NSData, options opt: NSJSONReadingOptions) throws -> AnyObject

【讨论】:

【参考方案3】:
    let data = JSON(data)
    print(data["key Of dictionary"].stringValue) //stringValue can be intValue or any other according to your use

print(data["key OF dictionary"][index]["key"].stringValue) // here you can change index according to need which index value you need 

【讨论】:

【参考方案4】:

我使用 SwiftyJSON:

https://github.com/SwiftyJSON/SwiftyJSON

例如:

let json = JSON(yourJsonObject)
let playlist = json("playlist")
if playlist.count > 0 
    for index in 0...playlist.count-1 
        self.ids.append(playlist[index]["id"].intValue)
        self.namas.append(playlist[index]["nama"].stringValue)
        ...
    

现在您有了一个 id 和名称数组。

【讨论】:

为什么要减去?这个问题是用例子回答的。

以上是关于如何在 swift 2 中解析和显示 JSON?的主要内容,如果未能解决你的问题,请参考以下文章

swift 2.2中api(json)没有数据时如何显示警报

Swift 2 解析和读取 JSON

试图将 JSON 解析为 swift3 并显示到 UILabel

如何使用 JSON.serializer 在 Swift 中解析 JSON

如何使用 Codable 在 Swift 中使用动态文件名解析 JSON

使用 Swift 解析 JSON