【问题标题】:Google Firebase - reformat JSON outputGoogle Firebase - 重新格式化 JSON 输出
【发布时间】:2020-01-27 07:51:59
【问题描述】:

我正在使用 Google Firebase,它生成带有如下数据的 JSON:

{
    "tasks": {
        "-LzH6kQjS_nY4P97EONB": {
            "createdBy": "Andrew",
            "date": "\"2020-01-23T11:17:24.213Z\"",
            "description": "Some task description.",
            "done": false
        }
    }
}

我想把它转换成这种格式:

[
    {
        "id": "-LzH6kQjS_nY4P97EONB",
        "createdBy": "Andrew",
        "date": "\"2020-01-23T11:17:24.213Z\"",
        "description": "Some task description.",
        "done": false
    }
]

我想我可以处理转换部分(如果你们在这里没有看到一些不可能的东西),但我想不出“返回”转换后的 JSON 文件的方法,所以它总是在链接下可用。有没有一种方法可以轻松地做到这一点,并且不会危及 Firebase 安全?

【问题讨论】:

  • '"returning" 转换后的 JSON 文件,所以它总是在链接下可用'你是什么意思?什么样的客户需要这样的格式?
  • Qlik 需要该格式的它,否则它将每个对象拆分为单独的表并为它们提供诸如“createdBy_u1”、“createdBy_u2”之类的后缀。 “在链接下” - 现在我提供了 Firebase .json 文件的链接,所以我可能需要提供其他链接来提供重新格式化的 JSON,还是我在混合内容?
  • 哦,我明白了。有很多方法可以解决这个问题。 Firebase 中添加数据的频率如何?您使用什么客户端添加数据?你可以访问它的代码吗?多人同时添加数据吗?您多久阅读一次生成的格式?会有多少元素? (比如……超过 100 个?)
  • 您目前提供什么 .json 链接?如果您要提供指向数据库根目录的链接,则可以通过提供指向“任务”路径的 .json 链接来解决您的问题。
  • @Stratubas 这不是根。我的帖子中的代码示例来自“任务”路径 JSON。 - 这是 Qlik mashup,我正在使用 JavaScript 来保存数据(这就是我决定使用 Firebase 的原因,因为我无法访问 PHP 等), - 是的,我可以访问该代码。 - 大约 20 人同时添加- 每月两次,- 元素是什么意思?

标签: javascript json firebase converters


【解决方案1】:

以下是一些可能的解决方案:

  1. 创建一个Database Triggered Cloud Function,每次在您的tasks 路径中添加任务时都会运行该Database Triggered Cloud Function。该函数应该使用新添加的数据来更新不同路径的数组,例如tasksAsArray。您可以使用transaction 读取现有数组,添加新项目并保存新数组。然后在 Qlik 的“.json” url 中使用该路径。

  2. 创建一个HTTP Callable Function,它将从数据库中读取您的tasks,并以您想要的格式返回一个数组作为响应。

  3. 修改客户端代码,直接以所需格式写入数据。


使用解决方案 1,随着时间的流逝和数据的增长,事务的性能将开始下降,但可能不会明显。如果您的响应中不需要非常旧的数据,除了在数组中添加任务之外,您还可以从中删除旧数据,以限制数组的大小。


使用解决方案 2,您可以Limit Queries 仅包含过去几个月或几年的任务。


解决方案 3 要求客户准确地知道已经有多少任务*,以便他们将新任务添加到适当的索引处。你说会有 20 个并发用户,所以会有多个客户端写在同一路径上的风险,并且会发生覆盖。

为防止覆盖,您可以使用this one 之类的数据库规则,并在客户端处理错误(使用正确的索引重试)。

您也可以从客户端执行数据库事务,但这会使添加任务的速度变慢,因为您的数组变得很大。云功能不在乎是否需要几秒钟来做某事,但用户在乎:)

*要查找已经有多少任务,您可以读取整个数组并计算元素。相反,您可以创建一个后台云函数来维护taskCount 路径,即:任务数。然后客户可以简单地读取该数字。

【讨论】:

  • 多么棒的清单,非常感谢!正如我在原始帖子中提到的,我将从#3 开始。谢谢!
猜你喜欢
  • 2018-04-13
  • 2014-07-24
  • 1970-01-01
  • 2017-05-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-24
相关资源
最近更新 更多