【问题标题】:What is the most efficient way to (pre)process large data sets stored in json?(预)处理存储在 json 中的大型数据集的最有效方法是什么?
【发布时间】:2020-09-27 22:29:03
【问题描述】:

我有一个包含 28k 对象的 json,用 360k 行代码编写。我有一个程序可以解码 json,然后使用解码的数据(谷歌地图中的 28k 标记)。

每次应用启动时都会执行解析 json 的函数,这似乎是不必要的(而且速度很慢)。所以我尝试将数据加载到单独的 swift 文件中的数组中。但即使打开一个包含 28k 字符串数组(每个 4 个字符)的 swift 文件也比打开一个包含 360k 行代码的整个 json 文件(包括那些 28k 字符串和 10 条关于每一个)所以我认为处理这样​​的原始数组比 json 解析然后读取要慢。

为什么会这样?如何以最有效的方式处理此类数据?是否需要在每次启动时解析或如何预处理 json 以节省一些内存?

【问题讨论】:

  • 分批加载,根据需要分批加载更多。
  • 听起来不错,但你能说得更具体点吗?:) 在每次启动时解析 json 是一种好方法还是一些预处理会产生明显的不同?
  • “所以我试图将数据加载到单独的 swift 文件中的数组中” - 你到底是什么意思?你的意思是你有一个全局变量是一个数组? @Eljer
  • 我有,但显然它是一个 nogo:)

标签: json swift xcode large-data


【解决方案1】:

由于您没有发布任何 JSON 片段,我假设您有这样的内容:

{    
fruits: {
    apples: [{
        color: "red",
        size: "20", // whatever unities
    }, {
        color: "green",
        size: "30",
    }, { /* ...  lots of apples ... */ }],
    bananas: [{
        oldness: 1,
        marks: 0
    }, {
        oldness: 3,
        marks: 4
    }, { /* ...  lots of bananas ... */ }],
    /* ... lots of fruits ... */
},
vegetables: {
    /* ... same as fruits ... */
},
/* ... lots of other stuff ... */
}

您可以做什么,您可以根据您的数据制作文件树,并在需要时更轻松地访问它。假设您需要在 T0 - 这是您的应用程序的开始 - 只有 apples 数据,然后您可以从 fruits 文件夹加载 apples.json

您可以拥有的文件树示例完全由 JSON 本身给出,您可以拥有如下内容:

data
| - fruits
|   | - apples.json
|   | - bananas.json
|
| - vegetables
|   | - cucumbers.json
|   | - i hope you get the idea

【讨论】:

  • 好的,我的树会像下面这样。在过滤要在地图上显示的机场标记之前,我必须处理整个 json 以获得坐标。
  • ``` 机场1 | - 纬度 | - 经度 | - 海拔| - ... | - … 机场2 | - 纬度 | - 经度 | - 海拔| - ... | - … 机场3 | - 纬度 | - 经度 | - 海拔| - ... | - ...```
  • 好的,听起来不错。将您的数据预处理成一些块。您可以按大洲、州或任何最适合您的方式定义文件夹。尝试获取地图的第一个视图,获取这些边界:(min_lat, min_long, max_lat, max_long)。根据您的块查看它们放置在哪个区域,首先加载这些机场,同时在后台加载所有机场。当视图改变时,检查你的chunk是否被加载,如果没有,让它优先加载。
  • 谢谢,现在我看到我的 json 可以大大改进了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-07-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-04
  • 2010-09-24
相关资源
最近更新 更多