如何从复杂的字典中获取值?

时间:2015-08-24 16:07:30

标签: swift

API会在下面返回此响应,但我不知道如何解析它。

响应JSON

[
 "results": [
    [
      "address": "mgG2W14th6TXYWXNDrZ24shsJ2wYhJm2b3",
      "total": [
        "balance": 0,
        "received": 0,
        "sent": 0
      ],
      "confirmed": [
        "balance": 0,
        "received": 0,
        "sent": 0
      ]
    ]
  ]
]

Swift Code

let appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate
appDelegate.chain!.getAddress(address!) { dictionary, error in
    NSLog("%@", dictionary)
}

字典对象

(lldb) po dictionary
[results: (
        {
        address = mgG2W14th6TXYWXNDrZ24shsJ2wYhJm2b3;
        confirmed =         {
            balance = 0;
            received = 0;
            sent = 0;
        };
        total =         {
            balance = 0;
            received = 0;
            sent = 0;
        };
    }
)]

我尝试了很多次......请你分享一下如何解决它...

(lldb) po dictionary["results"]![0]
{
    address = mgG2W14th6TXYWXNDrZ24shsJ2wYhJm2b3;
    confirmed =     {
        balance = 0;
        received = 0;
        sent = 0;
    };
    total =     {
        balance = 0;
        received = 0;
        sent = 0;
    };
}

po dictionary["results"]![0]!["address"]
error: <EXPR>:1:28: error: cannot subscript a value of type 'AnyObject' with an index of type 'String'
dictionary["results"]![0]!["address"]

我得到了#34;找不到会员&#39;下标&#39;&#34;在&#34;让地址= ...&#34;线。

    let appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate
    appDelegate.chain!.getAddress(address!) { dictionary, error in
        NSLog("%@", dictionary)

        let address = dictionary["results"]![0]["address"]!
        print("address: \(address)")
    }

1 个答案:

答案 0 :(得分:0)

if let myDictionary = dictionary as? [String:AnyObject] {
if let results = myDictionary["results"] as? [AnyObject] {
    if let firstItem = results[0] as? [String: AnyObject] {
        if let address = firstItem["address"] as? String {
            print(address)
        }
        if let total = firstItem["total"] as? [String:Int] {
            if let balance = total["balance"] {
                print(balance)
            }
            if let received = total["received"] {
                print(received)
            }
            if let sent = total["sent"] {
                print(sent)
            }
        }
        if let confirmed = firstItem["confirmed"] as? [String:Int] {
            if let balance = confirmed["balance"] {
                print(balance)
            }
            if let received = confirmed["received"] {
                print(received)
            }
            if let sent = confirmed["sent"] {
                print(sent)
            }
        }
    }
}
}

为了简化操作,如果返回的数据总是具有相同的格式,您可以创建一个管理此类解析的类。

相关问题