gpt4 book ai didi

ios - SwiftyJSON 不断返回空对象

转载 作者:可可西里 更新时间:2023-11-01 00:16:56 24 4
gpt4 key购买 nike

我是 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
}

但是,此 block 根本不会执行,因为 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

如有任何帮助,我将不胜感激!我做错了什么?

最佳答案

我检查了 SwiftyJSON 源代码,我想我知道问题出在哪里。

我想你正在使用 String 像这样初始化 JSON 对象

let s = "{\"entryID\": 1,\"from\": \"String\",\"to\": \"String\",\"value\": \"String\"}"
let j = JSON(s)

在这种情况下,JSON 对象实际上被赋予了“字符串”类型,而不是数组。这就是为什么它不可迭代且其 arrayValue 为空的原因。

要做你想做的事,你需要用一个Array对象初始化它:

let arr = [
[
"entryID":1,
"from":"String",
"to":"String",
"value":"String",
]
]

let j2 = JSON(arr)

现在 j2 是一个数组 JSON 对象并且是可迭代的。

SwiftyJSON 只能用 NSData 和对象初始化。所以如果你想用字符串初始化它,你需要这样做:

if let data = s.dataUsingEncoding(NSUTF8StringEncoding) {
let j = JSON(data:data)
println(j)
}

关于ios - SwiftyJSON 不断返回空对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28101849/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com