繁体   English   中英

在Swift 3中从JSON数据解析JSON数组

[英]Parsing JSON array from JSON data in Swift 3

我在解析JSON数据内的JSON数组时遇到了麻烦,仅仅是因为我收到的JSON数组并不总是一个数组。

数组的键是Body具体取决于另一个名为infoType参数。 Body将是数组或字符串。 infoType's值可以为1、2、3或4。当收到的infoType == 4 ,我们将Body作为数组,而当infoType的值等于1、2或3时,我们将Body作为普通字符串接收。 。

当我将Body作为JSON数组接收时,我想对其进行解析,而当它是普通字符串时,我希望将其另存为普通字符串。

这是我的代码:

import Foundation
import UIKit
var Parsedinfo  = [InfoClass]()
class UserInfo: UIViewController
{
    func parseData()
{
    Parsedinfo = []
    let url : String = "url"
    var request = URLRequest(url: URL(string: url)!)
    request.httpMethod = "GET"
    let configuration = URLSessionConfiguration.default
    let session = URLSession(configuration: configuration, delegate: nil, delegateQueue: OperationQueue.main)
    let task = session.dataTask(with: request) { (data, response, error) in
    if let data = data
        {
            do
                {
                let json = try JSONSerialization.jsonObject(with: data, options: .mutableLeaves) as! NSArray

                for Info in json
                {
                    let info     =    Info as! [String:Any]
                    let Title    =    info["Title"]
                    let InfoID   =    info["InfoID"]
                    let infoType =    info["infoType"]
                    let Body     =    info["Body"]
                    Parsedinfo.append(InfoClass(Title : Title as! String, Body: Body as!String,infoType : infoType as! Int, InfoID : InfoID as! Int))

                }

                }
            catch
            {
                print (error)
            }

   }
   }
      task.resume()
        }
  }
  class InfoClass
{

var Title    :  String
var Body     :  String
var InfoID   :  Int
var infoType :  Int

    init(Title : String,Body:String,infoType : Int, InfoID : Int)
{
    self.Title = Title
    self.Body = Body
    self.InfoID = InfoID
    self.infoType = infoType
}
}

这是当infoType == 4Body外观: {"lat":000.00000,"lng":000.0000000,"desc":"string"}

infoType is 1, 2, or 3, it's just a normal string like this: “ String”`

JSON结构:

  (
    {
    Body = "{"lat":00.0000,"lng":00.0000,"desc":"string"}";
    InfoID = 139;
    Title = "title";
    UserID = "userid";
    infoType = 4;
   },
   {
        Body = "    {"lat":00.0000,"lng":00.0000,"desc":"string"}";
        InfoID = 340;
        Title = yyy;
        UserID = "userid";
        infoType = 4;
    },
    { 
    Body = "Body";
    InfoID = 340;
    Title = yyy;
    UserID = "userid";
    infoType = 1;
    }

    )

假设您的API结果如您所提到的那样,并且在var json成功获取了结果。

我根据infoType解析json并将它们的主体列出为两个不同的数组。 您有模型类,因此请据此进行更改。

let json = try JSONSerialization.jsonObject(with: data, options: .mutableLeaves) as! [Any] 

var arrBodyStr : [String] = []
var arrBodyDict : [Any] = [ ]

for dictData in json{
    if dictData["infoType"] as? Int == 1 {
      arrBodyStr.append(dictData["Body"])
    }
    else{
      arrBodyDict.append(dictData["Body"])              
    }
}

如果我做错了或不符合您的要求,或者您没听懂,请询问。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM