Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios SwiftyJSON不断返回空对象_Ios_Json_Swift_Swifty Json - Fatal编程技术网

Ios SwiftyJSON不断返回空对象

Ios SwiftyJSON不断返回空对象,ios,json,swift,swifty-json,Ios,Json,Swift,Swifty Json,我是新来的,我在这方面遇到了一些麻烦。我可以让它以字符串的形式返回整个JSON文件,但在我尝试解析它的那一刻,我不断地返回空变量,我不确定我做错了什么 这是我的JSON文件的格式: [ { "entryID": 1, "from": "String", "to": "String", "value": "String" }, { ... }, ... ] 这大概就是我想用它做

我是新来的,我在这方面遇到了一些麻烦。我可以让它以字符串的形式返回整个JSON文件,但在我尝试解析它的那一刻,我不断地返回空变量,我不确定我做错了什么

这是我的JSON文件的格式:

[
    {
        "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感到失望,它并不是广告中的奇迹。