2016-10-28 15 views
0

私のAPIクエリは、配列内のいくつかの値を返します(下記参照)。入れ子になっている値60を取得するにはどうすればよいですか?ネストされた配列から値を返す方法 - swift 3

マイコード(例:let uid = value["uid"] as? String)は、uidとnameを返すのにうまく機能します。 しかし、let rest = value["field_resting_bpm"] as? Stringの場合、nilを返します。

どのように私は、ネストされた値 '60' を返すように、この行を修正するか?:

let rest = value["field_resting_bpm"] as? String' 

APIのクエリは次のとおりです。

let credentialData = "\(user):\(password)".dataUsingEncoding(NSUTF8StringEncoding)! 
    let base64Credentials = credentialData.base64EncodedStringWithOptions([]) 
    let headers = ["Authorization": "Basic \(base64Credentials)"] 

するvar checkUserEndpoint:文字列= "https://example.site/ios1/user/1.json"

Alamofire.request(.GET, checkUserEndpoint, parameters: nil, headers: headers, encoding: .JSON) 
     .responseJSON { response in 
      guard response.result.error == nil else { 
       print("ran alamofire") 
       //got an error in getting the data, need to handle it 
       print("error calling GET") 
       print(response.result.error!) 
       return 
      } 

      guard let value = response.result.value else { 
       print("no result data received when calling GET") 
       return 
      } 
      // return UID 
      print("ran alamofire") 
      var datareturned = JSON(value) 
      print("VALUE: \(value)") 

これを私のコンソールに返します。

​​

UPDATE:このフィールドは、Drupalのユーザーアカウント設定の整数です。私はまた、サイト上で

JSONをテストするために、field_rest_bpm_stringという名前のテキストフィールドを(それが文字列を返す必要があります)、追加した返されます。

「field_resting_bpm」:{「ウント」:[{「値」 : "60"}]}、 "field_rest_bpm_string":{ "ウント":[{ "値": "65"、 "フォーマット":ヌル、 "safe_value": "65"}]}

+0

最初に構造を確認してください。 'field_resting_bpm'は辞書であり、最初のオブジェクトが" value "という名前のキー値を持ち、値が60である配列' und'を持っています。 –

+0

良いヒント、ありがとうございます。ちょうどチェックされ、私のDrupal7サイトでは、このフィールドはフィールドタイプIntegerを持つユーザーアカウントにあります。私はIntにコードを変更するオプションを試しています、これまでの運はありません。 Drupalユーザー設定のフィールドを文字列に変更しようとします。 –

答えて

1

:コードはSwift 3にありますが、簡単に2に変換できます。SwiftyJSONバージョンコードは2と3で同じです。

SwiftyJSONを使用している場合は、あなたはこのようなSwiftyJSON

let rest = value["field_resting_bpm"] as? NSDictionary 
let und = (rest?.value(forKey: "und") as! NSArray).object(at: 0) as! NSDictionary 
let yourValue = und.value(forKey: "value") as! String 

何かを使用していない場合イングスは

let value = datareturned["field_resting_bpm"]["und"][0]["value"].stringValue 
print(value) 

はかなり簡単です。

+1

Swiftでは、NSDictionaryとNSArrayの代わりにネイティブディクショナリと配列を使用するのが面倒です。 –

+0

true ...しかし、私は 'SwiftyJSON'を使うのが好きです。また、必要に応じてネイティブになる場合もあります。ここでは参照があります。私たちは値を使用しています。構造体 –

+0

私は 'NSDictionary'と' NSArray'について 'SwiftyJSON'ではありません。 –

関連する問題