作者:mobiledu2502889883 | 来源:互联网 | 2023-05-25 13:59
我是SwiftyJSON的新手,我遇到了一些麻烦.我可以让它将整个JSON文件作为一个字符串返回,但是当我尝试解析它时,我不断回到空变量,我不确定我做错了什么.
这是我的JSON文件的格式:
[
{
"entryID": 1,
"from": "String",
"to": "String",
"value": "String"
},
{
...
},
...
]
这大致是我想用它做的(在非常不优雅的代码中,我道歉,我是Swift的新手):
for entry: JSON in indexJSON.arrayValue {
var vEntryID: Int
var vFrom: String
var vTo: String
var vValue: String
for (dictKey: String, dictVal: JSON) in entry.dictionaryValue {
if(dictKey=="entryID") {vEntryID = dictVal.intValue}
if(dictKey=="from") {vFrom = dictVal.stringValue}
if(dictKey=="to") {vTo = dictVal.stringValue}
if(dictKey=="value") {vValue = dictVal.stringValue}
}
someSwiftObject[vEntryID]["from"] = vFrom
someSwiftObject[vEntryID]["to"] = vTo
someSwiftObject[vEntryID]["value"] = vValue
}
但是,此块永远不会执行,因为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
我会感激任何帮助!我究竟做错了什么?
1> skyline75489..:
我检查了SwiftyJSON源代码,我想我知道问题所在.
我想你正在使用String来初始化这样的JSON对象
let s = "{\"entryID\": 1,\"from\": \"String\",\"to\": \"String\",\"value\": \"String\"}"
let j = JSON(s)
在这种情况下,JSON对象在给定类型"String"而不是Array的情况下是实际的.这就是为什么它不可迭代并且其arrayValue为空.
要执行您想要执行的操作,您需要使用Array对象对其进行初始化:
let arr = [
[
"entryID":1,
"from":"String",
"to":"String",
"value":"String",
]
]
let j2 = JSON(arr)
现在j2是一个数组JSON对象并且可迭代.
SwiftyJSON只能用NSData和object初始化.因此,如果要使用String初始化它,则需要执行以下操作:
if let data = s.dataUsingEncoding(NSUTF8StringEncoding) {
let j = JSON(data:data)
println(j)
}