JSON 输出不包含键:"value"
The JSON output does not contain a key: "value"
我的 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: {}
},
...
假设你想访问结果键,那么试试这样:-
if let bpArray = jsonValue["results"] as? [String: AnyObject]{
//yourcode
}
嗯,您的 json 结构没有任何名为值的键,这就是它给出错误的原因。
为了获得结果数组,您首先需要获得它们嵌套的对象,例如 'g'
在您的情况下:
if let data = jsonValue["d"] as? [NSDictionary]{
if let resultsArray = data["results"] as? NSArray {
//your code
}
}
请使用 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)")
}
记住,我们最好不要像 SWIFT
、SWIFT
中那样使用 NSArray
和 NSDictionary
,它会自行提供 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: [=11=])})//for assigning data into model
}
}
正如大多数人所说,我错了"value"。 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 {
我的 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: {}
},
...
假设你想访问结果键,那么试试这样:-
if let bpArray = jsonValue["results"] as? [String: AnyObject]{
//yourcode
}
嗯,您的 json 结构没有任何名为值的键,这就是它给出错误的原因。
为了获得结果数组,您首先需要获得它们嵌套的对象,例如 'g'
在您的情况下:
if let data = jsonValue["d"] as? [NSDictionary]{
if let resultsArray = data["results"] as? NSArray {
//your code
}
}
请使用 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)")
}
记住,我们最好不要像 SWIFT
、SWIFT
中那样使用 NSArray
和 NSDictionary
,它会自行提供 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: [=11=])})//for assigning data into model
}
}
正如大多数人所说,我错了"value"。 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 {