我的Swift代码有JSON
解析问题。我收到的错误表明我的JSON
输出不包含密钥value
。
我的代码:
Alamofire.request(url, method: .get, headers: headers).responseJSON { (response) -> Void in
let jsonValue = response.result.value as! NSDictionary
if let bpArray = jsonValue["value"] as? [NSDictionary]{
for results in bpArray {...}
问题:
此转换不起作用:if let bpArray = jsonValue["value"] as? [NSDictionary]
我的JSON结构:
{
d: {
results: [
{
__metadata: {},
Key: "AFBWhULFHtKU4j4FhWCmKg==",
ParentKey: "AAAAAAAAAAAAAAAAAAAAAA==",
RootKey: "AFBWhULFHtKU4j4FhWCmKg==",
Partner: "MM-CARR-01",
Type: "2",
Description: "MM Demo Carrier Created for Single Stop / MA",
FrieghtOrder: {}
},
...
答案 0 :(得分:1)
假设您要访问结果键,请尝试这样: -
shares (Just (x, y)) = Just x
答案 1 :(得分:1)
那么你的json结构还没有任何一个名为value的键,这就是它发出错误的原因。
为了获得结果数组,首先需要获取它们嵌套的对象,例如'g'
:
if let data = jsonValue["d"] as? [NSDictionary]{
if let resultsArray = data["results"] as? NSArray {
//your code
}
}
答案 2 :(得分:0)
请使用Swifty Json Pod并尝试此代码
pod 'SwiftyJSON'
在您收到回复的文件中
import SwiftyJSON
然后使用此代码后
switch response.result {
case .success(let JSON2):
print("Success with JSON: \(JSON2)")
// print("Request failed with error: \(response.response?.statusCode)")
if let response = JSON2 as? NSMutableDictionary
{
}
else if let response = JSON2 as? NSDictionary
{
if let data = response?.object(forKey: "d") as? NSDictionary
{
if let resultsArray = data?.object(forKey: "results") as? NSArray
{
}
}
}
else if JSON2 is NSArray
{
let swjson = JSON(response.result.value!)
print(swjson)
// callback(swjson,nil)
var myMutableDictionary = [AnyHashable: Any]()
myMutableDictionary["myArray"] = swjson
callback(myMutableDictionary as NSDictionary?,nil)
print("accc")
}
else if ((JSON2 as? String) != nil)
{
let userDic : [String : String] = ["quatid":JSON2 as! String]
print(userDic)
}
break
case .failure(let error):
print("Request failed with error: \(error)")
}
答案 3 :(得分:0)
请记住,我们最好不要使用NSArray
& NSDictionary
类似SWIFT
SWIFT
中的内容,它为各种数据类型自行提供let
,var
个关键字。
首先,您可以创建可以保存数据的模型。
<强> MyModel.swift 强>
class MyModel: NSObject {
var ParentKey : Int?
init(jsonObject:[String:Any]) {
ParentKey = jsonObject["ParentKey"] as? String ?? ""
}
}
<强> Viewcontroller.Swift 强>
var myModel : [MyModel] = []
if let responseData = response["d"] as? [String:Any]{
if let dataObject = responseData["results"] as? [[String:Any]]{
self.myModel = dataObject.map({return MyModel(jsonObject: $0)})//for assigning data into model
}
}
答案 4 :(得分:0)
正如大多数人所说,我对“价值”的看法不对。 Hussain使用[String:AnyObject]
帮助的答案。
我不确定下面是否能够实现,但它确实是神奇的。应用按预期加载。代码专家如下:
<强>解决方案:强>
if let bpData = jsonValue["d"] as? [String: AnyObject]{
for results in bpData {
let arrayInterim = results.value as? NSArray
for i in 0 ..< arrayInterim!.count {