2

私は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

どんな助けにも感謝します!私は何を間違っていますか?

4

3 に答える 3

6

SwiftyJSON のソース コードを確認したところ、どこに問題があるかがわかったと思います。

このようなJSONオブジェクトを初期化するためにStringを使用していると思います

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)
}
于 2015-01-23T02:20:52.903 に答える