【问题标题】:How can I post nested data to the firebase firestore with HTTP requests?如何使用 HTTP 请求将嵌套数据发布到 firebase firestore?
【发布时间】:2020-07-02 01:33:23
【问题描述】:

因此,我一直在为我正在从事的 Godot 项目的 REST API 后端使用 firebase firestore 功能。我正在使用 HTTP 请求从数据库中发布和获取数据。到目前为止,我只使用了简单类型的数据,将一个用户的 ID 作为字符串与他或她的用户名相关联。

在我的代码中,我定义了一个函数,负责通过 HTTP 请求实际保存新文件:

func save_document(path: String, fields: Dictionary, http: HTTPRequest) -> void:
    var document = { "fields": fields }
    var body = to_json(document)
    var url = FIRESTORE_URL + path
    var res = http.request(url, _get_request_headers(), false, HTTPClient.METHOD_POST, body)
    if res == OK:
        print("successfully created document")
    else:
        print("failed creating document")

然后我调用函数:

var payload_body_1 = {
    "name": {
        "stringValue": username.text
        }
    }

save_document("users?documentId=%s" % firebase.user_info.id, payload_body_1, http)

以上所有方法都可以 100% 正常工作。但是当我尝试发布更复杂的数据时,例如字典的字典,我遇到了一些问题。

当我运行以下代码时:

var res =   { 
                "north": {"spades": [], "hearts": [], "diamonds": [], "clubs": []},
                "south": {"spades": [], "hearts": [], "diamonds": [], "clubs": []},
                "east": {"spades": [], "hearts": [], "diamonds": [], "clubs": []},
                "west": {"spades": [], "hearts": [], "diamonds": [], "clubs": []},
                }

save_document("online?documentId=test", res, http)

它不起作用。我想它与我在它工作的情况下使用的“stringValue”键有关,但我似乎无法弄清楚当值不是字符串值时该怎么做。有谁知道如何解决这个问题?

【问题讨论】:

    标签: firebase google-cloud-firestore godot gdscript


    【解决方案1】:

    好的,所以我实际上解决了它,但我想如果其他人将来可能遇到同样的问题,我不妨在这里发布答案。

    所以基本上,每个字段都需要一个数据类型,例如“stringValue”。对于字典,您需要“mapValue”,对于列表,您需要“arrayValue”。在上面的示例中,您需要使用如下代码:

    var res =   { 
                    "north": { "mapValue": { "fields": { 
                        "spades": { "arrayValue": { "values": [] } }, 
                        "hearts": { "arrayValue": { "values": [] } }, 
                        "diamonds": { "arrayValue": { "values": [] } }, 
                        "clubs": { "arrayValue": { "values": [] } }
                        } } },
                    
                    "south": { "mapValue": { "fields": { 
                        "spades": { "arrayValue": { "values": [] } }, 
                        "hearts": { "arrayValue": { "values": [] } }, 
                        "diamonds": { "arrayValue": { "values": [] } }, 
                        "clubs": { "arrayValue": { "values": [] } }
                        } } },
                    
                    "east": { "mapValue": { "fields": { 
                        "spades": { "arrayValue": { "values": [] } }, 
                        "hearts": { "arrayValue": { "values": [] } }, 
                        "diamonds": { "arrayValue": { "values": [] } }, 
                        "clubs": { "arrayValue": { "values": [] } }
                        } } },
                    
                    "west": { "mapValue": { "fields": { 
                        "spades": { "arrayValue": { "values": [] } }, 
                        "hearts": { "arrayValue": { "values": [] } }, 
                        "diamonds": { "arrayValue": { "values": [] } }, 
                        "clubs": { "arrayValue": { "values": [] } }
                        } } }
                    }
    

    mapValues 需要“fields”键,它是与“mapValue”关联的字典中的键的字典。 arrayValues 需要类似的东西,但是是“值”而不是“字段”。 values 中数组的每个元素都应该是一个字典,例如,如果您希望数组包含字符串,则每个元素应如下所示:

    { "stringValue": "text" }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-09-28
      • 2020-01-07
      • 1970-01-01
      • 2018-03-23
      • 2019-03-22
      • 2016-12-27
      • 1970-01-01
      • 2019-05-17
      相关资源
      最近更新 更多