Ios SwiftyJSON不断返回空对象
我是新来的,我在这方面遇到了一些麻烦。我可以让它以字符串的形式返回整个JSON文件,但在我尝试解析它的那一刻,我不断地返回空变量,我不确定我做错了什么 这是我的JSON文件的格式:Ios SwiftyJSON不断返回空对象,ios,json,swift,swifty-json,Ios,Json,Swift,Swifty Json,我是新来的,我在这方面遇到了一些麻烦。我可以让它以字符串的形式返回整个JSON文件,但在我尝试解析它的那一刻,我不断地返回空变量,我不确定我做错了什么 这是我的JSON文件的格式: [ { "entryID": 1, "from": "String", "to": "String", "value": "String" }, { ... }, ... ] 这大概就是我想用它做
[
{
"entryID": 1,
"from": "String",
"to": "String",
"value": "String"
},
{
...
},
...
]
这大概就是我想用它做的(在相当不雅的代码中,我道歉,我是Swift的新手):
但是,这个块永远不会执行,因为indexJSON.arrayValue始终为空
当我尝试运行以下操作时,它会将完整的文件内容正确地打印到控制台:
let indexJSON = JSON(content!)
println(indexJSON.stringValue)
但当我试图深入获取任何元素时,它都不会返回任何结果:
if(indexJSON.arrayValue.isEmpty==true) {println("indexJSON.arrayValue is Empty")}
if(indexJSON[0].arrayValue.isEmpty==true) {println("indexJSON[0].arrayValue is Empty")}
if(indexJSON[0].dictionaryValue.isEmpty==true) {println("indexJSON[0].dictionaryValue is Empty")}
if(indexJSON[0]["entryID"]==nil) {println("indexJSON[0][\"entryID\"].stringValue is Empty")}
输出:
indexJSON.arrayValue is Empty
indexJSON[0].arrayValue is Empty
indexJSON[0].dictionaryValue is Empty
indexJSON[0]["entryID"].stringValue is Empty
如果有任何帮助,我将不胜感激!我做错了什么?请查看此处的文档: 您正在错误地迭代它。您应该使用for循环在数组上迭代,如下所示:
for (index: String, subJson: JSON) in json {
//Do something you want
}
let strData = jsonStr.data(using: String.Encoding.utf8, allowLossyConversion: false)
let json = JSON(data: strData!)
for object in json.arrayValue {
let name = object["name"].string
}
我检查了SwiftyJSON源代码,我想我知道问题出在哪里了 我假设您正在使用字符串初始化JSON对象,如下所示
let s = "{\"entryID\": 1,\"from\": \"String\",\"to\": \"String\",\"value\": \"String\"}"
let j = JSON(s)
在这种情况下,JSON对象实际上是一个“字符串”类型,而不是数组。这就是为什么它不可iterable,它的arrayValue为空
要执行您想要执行的操作,您需要使用数组对象对其进行初始化:
let arr = [
[
"entryID":1,
"from":"String",
"to":"String",
"value":"String",
]
]
let j2 = JSON(arr)
现在j2是一个数组JSON对象,并且是可编辑的
SwiftyJSON只能使用NSData和object进行初始化。因此,如果要使用字符串对其进行初始化,则需要执行以下操作:
if let data = s.dataUsingEncoding(NSUTF8StringEncoding) {
let j = JSON(data:data)
println(j)
}
首先,确保json字符串的格式正确。在您的问题中,您的json字符串是一个数组,只需将字符串格式化如下(内容来自我的代码): 然后可以使用SwityJson获取数组对象,如下所示:
for (index: String, subJson: JSON) in json {
//Do something you want
}
let strData = jsonStr.data(using: String.Encoding.utf8, allowLossyConversion: false)
let json = JSON(data: strData!)
for object in json.arrayValue {
let name = object["name"].string
}
嗯,不知什么原因,我从来没有这样做过。啊哈!这似乎很有可能,我正在使用以下代码阅读JSON:“
let path=NSBundle.mainBundle().pathForResource(“entries”,of type:“JSON”);let content=String(contentsOfFile:path!,encoding:NSUTF8StringEncoding,error:nil);let JSON=JSON(content!)
”。我如何将一个文件作为JSON对象加载,以使其具有可移植性?我对Swifty感到失望,它并不是广告中的奇迹。