【问题标题】:Dealing with a very large JSON file [closed]处理一个非常大的 JSON 文件 [关闭]
【发布时间】:2021-07-31 18:46:46
【问题描述】:

我正在制作一个显示“UFO”目击事件列表的项目。我最初打算找到一个我可以为此调用的 API,但也无法做到。我确实找到了一个相当大的 JSON 文件(33mb),其中包含 UFO 目击报告。这个 JSON 文件中有超过一百万行代码。使用这些数据的最佳方式是什么?我应该将其上传到 Firebase 数据库吗?将 JSON 分解为多个文件?我从来没有处理过这么大的 JSON 文件。经过研究,似乎有多种解决方案。您认为处理大型 JSON 文件的最佳方式是什么?

文件示例。

{
    "datetime": "10/10/1965 21:00",
    "city": "penarth (uk/wales)",
    "state": "",
    "country": "gb",
    "shape": "circle",
    "duration (seconds)": "180",
    "duration (hours": {
      "min)": "about 3 mins"
    },
    "comments": "penarth uk  circle  3mins  stayed 30ft above me for 3 mins slowly moved of and then with the blink of the eye the speed was unreal",
    "date posted": "2/14/2006",
    "latitude": "51.434722",
    "longitude": -3.18
  },

【问题讨论】:

  • “使用这些数据的最佳方式是什么?”众所周知,关于“什么是最好的”的问题在这里很难回答。我们还不知道您想对这些数据做什么。我建议将数据导入 Firebase,并尝试在其上实现前几个用例。当您遇到困难时,请回复具体问题,我们更有可能提供帮助。
  • 好的,谢谢。我想根据用户搜索的“状态”向用户显示数据。例如,如果用户搜索“纽约”,它将显示纽约的所有 UFO 叹息。
  • 只是为了提供一点观点,一百万行代码实际上并没有多少数据,Firebase(和大多数数据库)可以轻松处理 - 所以不要担心大小。跨度>

标签: json reactjs firebase


【解决方案1】:

假设您将数据导入 Firebase 实时数据库,然后结构如下:

ufos
  |- sight1: {}
  |- sight2: {}

对于此示例,我们假设景点 1 在纽约。如果您的用户输入纽约市,那么您可以轻松地查询它:

const ufoRef = firebase.database().ref("ufos")
const query = ufoRef.orderByChild("City").equalTo("New York").limitToFirst(20)

query.once("value").then((snapshot) => {
  console.log(snapshot.val())
})

这将记录纽约的前 20 次 UFO 目击事件。不幸的是,您只能在实时数据库中使用 1 个 equalTo,因此,如果您想在特定日期和持续时间在纽约进行目击,那可能是不可能的,因此我建议考虑使用可以执行此类查询的 Firestore。

关于大小,33 MB 不是您应该担心的。 Firebase 免费配额也有 1 GB 的存储空间。

【讨论】:

  • Dharmaraj,感谢您的意见!我很感激。所以你认为我可以从内存中提取这个 json 数据就好了?基本上使用树形结构,我认为它太多了,但我想我只是假设,我不确定什么“大小”被认为是大的。
  • @meeshaa 你说的记忆是什么意思?是的,您可以像我的回答一样编写一些基本查询……考虑到您有这么多活动,33 mb 就可以了。
  • 我可以只导入这个 json 文件并根据用户输入循环遍历它吗?还是文件太大,我需要走不同的路线?
  • @meeshaa 你没有遍历它......你使用我的回答中提到的查询。 Firebase 将返回与您的查询匹配的 das。使用 20 的限制将仅返回 20 个事件,因此在任何情况下都不是缺点……只需提取所需的数据。尝试对其进行分页。
  • 非常感谢。
猜你喜欢
  • 2023-03-25
  • 2013-05-30
  • 1970-01-01
  • 2014-12-28
  • 1970-01-01
  • 2013-05-16
  • 2017-03-26
  • 1970-01-01
  • 2012-08-17
相关资源
最近更新 更多