使用 Alamofire 从 Firebase 检索 JSON

Posted

技术标签:

【中文标题】使用 Alamofire 从 Firebase 检索 JSON【英文标题】:Retrieve JSON from Firebase with Alamofire 【发布时间】:2018-04-17 19:08:55 【问题描述】:

这是我的代码:

let urlWithId = url + buildingInfo.building.identifier + ".json"
Alamofire.request(urlWithId).responseJSON (response) in
    print(response.result.value)

当打印 Any? 类型的值时,我得到这个:

Optional(<__NSArrayI 0x123456789012>(
<null>,

    aaa = 111;
    bbb = "bbb";
    ccc = 000;
    ddd = "ddd";
    eee =     (
        a,
        b,
        c
    );

)
)

这应该可以工作,但总是返回 nil:

if let value = response.result.value as? NSDictionary 
    // Never gets into here, always nil

我想要一个 JSON:

aaa:无符号长 bbb:字符串 ccc:无符号长 ddd:字符串 eee:json

如果我在 Safari 中执行请求,我会得到:

[
    null,
    
        "aaa":111,
        "bbb":"bbb",
        "ccc":000,
        "ddd":"ddd",
        "eee":[
                  "a",
                  "b",
                  "c"
              ]
    
]

有什么想法吗?也许是另一种使用 Firebase URL 请求 json 的方式

【问题讨论】:

您的数据库firebase有问题,请添加您的数据库截图 【参考方案1】:

我可以看到 JSON 响应,您没有得到字典,而是得到数组。您需要在索引1 中回复。所以解析为:

在您的响应 JSON 数组中:

索引 0 = null

索引 1 = 数组

将您的代码更新为:

if let value = response.result.value as? [Any], let dict = value[1] as? [String: Any] 
    print(dict)

【讨论】:

[“aaa”:111,“bbb”:bbb,“ccc”:000,“eee”:<__nsarrayi>(a,b,c),“ddd”:ddd] 【参考方案2】:

请试试这个:

switch response.result 
            case .success(let data):
                    debugPrint("\n Success: \(data)")
            case .failure(let error):
                debugPrint("\n Failure: \(error.localizedDescription)")
            

【讨论】:

"\n 成功:(\n \"\",\n \n aaa = 111;\n bbb = \"bbb\";\n ccc = 111;\ n ddd = \"ddd\";\n eee = (\n a,\n b,\n c\n );\n \n)"

以上是关于使用 Alamofire 从 Firebase 检索 JSON的主要内容,如果未能解决你的问题,请参考以下文章

检索子值 Failed-Firebase- Android

如何在firebase中检索子(自动增量)名称

如何使用 Alamofire 的 RequestAdapter 将 firebase ID 令牌设置为全局标头?

Firebase 和 Alamofire Url TableViewCell 图像加载问题 Swift 4

如何使用 HashMap 从 Android 的 Firebase 中的子节点获取数据?

将带有完成处理程序的 Firebase IdToken 添加到每个 AlamoFire 请求