![](/img/trans.png)
[英]Swift: Error while Parsing JSON data from alamofire into array with Dictionary
[英]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 == 4
时Body
外观: {"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.