一种大体积JSON文件拆分并按需请求的方法转让专利

申请号 : CN202011349468.3

文献号 : CN112463735B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 李兴平肖显斌

申请人 : 四三九九网络股份有限公司

摘要 :

本发明提供一种大体积JSON文件拆分并按需请求的方法,包括以下步骤:开发端将需拆分存储的大体积JSON文件以及预定义的拆分规则发送给服务端;服务端按预定义规则遍历该大体积JSON文件,并将遍历到的符合要求的结点内容生成一个新的小体积JSON文件,在大体积JSON文件中,将对应的结点内容采用对应的标识符替换;用户端按需请求所需内容。优点为:本发明在不破坏原有大体积JSON文件数据结构的基础上,将大体积JSON文件拆分为多个相关联的小体积JSON文件,并存储于服务端,方便需要使用这些JSON文件的各用户端按需请求所需的JSON文件,进而提高用户端请求所需JSON文件的效率和体验。

权利要求 :

1.一种大体积JSON文件拆分并按需请求的方法,其特征在于,包括以下步骤:

步骤1,开发端将需拆分存储的大体积JSON文件以及预定义的拆分规则发送给服务端;

其中,所述拆分规则包括小体积JSON文件的体积最小阈值M1以及小体积JSON文件允许的层数最大阈值M2;

步骤2,所述大体积JSON文件的结构形式为:由多层嵌套形成的key键‑value值对构成;

其中,位于根目录的key键K0为主key键,所述key键K0的所有子孙结点以及叶子结点,为所述key键K0的value值V0;

所述key键K0具有多个位于第1层目录的子结点,每个子结点为第1层key键或第1层value值;其中,每个第1层key键的所有子孙结点以及叶子结点,为该第1层key键的value值;

对于每个第1层key键,具有多个位于第2层目录的子结点,每个子结点为第2层key键或第2层value值;其中,每个第2层key键的所有子孙结点以及叶子结点,为该第2层key键的value值;

依此类推,形成多层嵌套的大体积JSON文件结构;其中,对于不具有子结点的各层value值所对应的结点,为叶子结点;对于具有子结点的各层key键所对应的结点,为联结结点;

步骤3,所述大体积JSON文件,自上向下共有n层,分别为第1层,第2层,...,第n层;其中,第n层的所有结点必然均为叶子结点;第2层到第n层的结点,包括叶子结点和/或联结结点;

所述服务端首先遍历该大体积JSON文件的所有叶子结点,对于遍历到的每个叶子结点,表示为叶子结点C0,判断叶子结点C0对应的value值的体积,是否大于体积最小阈值M1,如果大于,则执行步骤4;如果不大于,则继续对下一个叶子结点进行遍历操作;

步骤4,将叶子结点C0对应的value值生成一个新的小体积JSON文件D0,再生成一个用于唯一标识新的小体积JSON文件D0的标识符T0,新的小体积JSON文件D0采用标识符T0命名;然后,在大体积JSON文件中,将叶子结点C0对应的value值用标识符T0替换;

如此不断循环,直到完成对大体积JSON文件中所有叶子结点C0的遍历,由此得到一次处理后的大体积JSON文件;

步骤5,所述服务端对一次处理后的大体积JSON文件进行二次遍历,遍历方式为:

所述服务端对一次处理后的大体积JSON文件的第n‑1层的各个联结结点进行遍历,对于遍历到的每个第n‑1层联结结点,表示为第n‑1层联结结点Cn‑1,判断第n‑1层联结结点Cn‑1的所有子孙结点的体积,是否大于体积最小阈值M1,如果大于,则执行步骤6;如果不大于,则执行步骤7;当对第n‑1层的各个联结结点均遍历结束后,执行步骤8;

步骤6,将第n‑1层联结结点Cn‑1的所有子孙结点,保级其子孙间连接结构不变,生成一个新的小体积JSON文件Dn‑1,再生成一个用于唯一标识新的小体积JSON文件Dn‑1的标识符Tn‑1,新的小体积JSON文件Dn‑1采用标识符Tn‑1命名;然后,在一次处理后的大体积JSON文件中,将第n‑1层联结结点Cn‑1的所有子孙结点用标识符Tn‑1替换;然后返回步骤5,继续对其他第n‑1层联结结点Cn‑1进行遍历;

步骤7,进一步判断第n‑1层联结结点Cn‑1当前具有的子孙结点的层数,是否达到层数最大阈值M2,如果没有达到,则返回步骤5,继续对其他第n‑1层联结结点Cn‑1进行遍历;如果达到,则返回步骤6;

步骤8,所述服务端,采用步骤5‑步骤7的方法,对二次处理后的大体积JSON文件进行三次遍历,即:对二次处理后的大体积JSON文件的第n‑2层的各个联结结点进行遍历,如此不断循环,直到完成对第2层的各个联结结点的遍历;此时,通过采用标识符替换的方式,原始的大体积JSON文件变为小体积的JSON索引文件,同时得到多个相关联的新的小体积JSON文件形成的JSON文件组;并且,JSON索引文件的文件结构,与原始的大体积JSON文件的文件结构相同;JSON索引文件的IP地址,与原始的大体积JSON文件的IP地址相同;

步骤9,用户端向服务端发送获取IP地址对应的JSON文件的请求消息;服务端通过IP地址定位到JSON索引文件,并将JSON索引文件发送给用户端;

步骤10,用户端接收到完整的小体积的JSON索引文件,用户端对JSON索引文件的内容进行分析读取,当需要读取与第一目标标识符对应的具体内容时,向服务端发送获得第一目标标识符内容的请求;

步骤11,服务端根据第一目标标识符,查找小体积JSON文件形成的JSON文件组,得到对应的小体积JSON文件,并发送给用户端;

步骤12,用户端接收到小体积JSON文件后,对小体积JSON文件进行分析读取,如果小体积JSON文件仍然具有某个需要读取的第二目标标识符时,则用户端再向服务端获取与第二目标标识符对应的小体积JSON文件;如此反复,实现用户端按需请求JSON文件内容的效果。

2.根据权利要求1所述的一种大体积JSON文件拆分并按需请求的方法,其特征在于,步骤4中,生成用于唯一标识新的小体积JSON文件D0的标识符T0,为新的小体积JSON文件D0的MD5值。

说明书 :

一种大体积JSON文件拆分并按需请求的方法

技术领域

[0001] 本发明属于信息处理技术领域,具体涉及一种大体积JSON文件拆分并按需请求的方法。

背景技术

[0002] JSON(JavaScript Object Notation,JS对象简谱)格式文件,是一种轻量级的数据交换格式文件,因其具有格式简单、支持多种开发语言以及体积小等特点,广泛应用在前端、后端、客户端等。
[0003] 开发过程中,常将相关的资源和数据等信息配置在一个JSON文件内,并存储于服务端。在使用时,拉取服务端的JSON文件,再根据JSON内容进行相应的功能。
[0004] 在实现本发明的过程中,发明人发现,现有技术至少存在以下问题:
[0005] 一个项目随版本迭代和开发时间的增长,项目将会越来越大,所配置的JSON文件体积也在不断增大,由此导致以下问题:
[0006] (1)当用户端向服务端请求JSON文件的页面时,因为JSON文件的体积较大,因此,请求时间较长,请求过程消耗大量带宽和时间;另外,因网络波动等客观原因,常常出现JSON文件请求失败的现象,由此降低用户端的使用体验。
[0007] (2)此外,当将完整的JSON文件从服务端请求到用户端后,用户端通常只需要使用JSON文件内的少量字段,对于JSON文件中的大量字段,对用户端并没有实际使用价值,同样会占用用户端存储资源。
[0008] 为解决上述问题,现有技术采用以下两种方式处理:
[0009] (1)在开发配置JSON文件过程中,将资源放到不同JSON文件中,从而形成多个体积较小的JSON文件。
[0010] (2)循环整个大体积JSON文件,设置长度条件,当达到长度时,将这一长度的文件内容放置到一个新的JSON文件中,从而形成多个小体积的JSON文件。
[0011] 以上两种将大体积JSON文件拆分形成小体积JSON文件的方式,在用户端使用时,常常不方便理解各个小体积JSON文件之间的关联性,也容易破坏原有大体积JSON文件的数据整体结构。

发明内容

[0012] 针对现有技术存在的缺陷,本发明提供一种大体积JSON文件拆分并按需请求的方法,可有效解决上述问题。
[0013] 本发明采用的技术方案如下:
[0014] 本发明提供一种大体积JSON文件拆分并按需请求的方法,包括以下步骤:
[0015] 步骤1,开发端将需拆分存储的大体积JSON文件以及预定义的拆分规则发送给服务端;其中,所述拆分规则包括小体积JSON文件的体积最小阈值M1以及小体积JSON文件允许的层数最大阈值M2;
[0016] 步骤2,所述大体积JSON文件的结构形式为:由多层嵌套形成的key键‑value值对构成;其中,位于根目录的key键K0为主key键,所述key键K0的所有子孙结点以及叶子结点,为所述key键K0的value值V0;
[0017] 所述key键K0具有多个位于第1层目录的子结点,每个子结点为第1层key键或第1层value值;其中,每个第1层key键的所有子孙结点以及叶子结点,为该第1层key键的value值;
[0018] 对于每个第1层key键,具有多个位于第2层目录的子结点,每个子结点为第2层key键或第2层value值;其中,每个第2层key键的所有子孙结点以及叶子结点,为该第2层key键的value值;
[0019] 依此类推,形成多层嵌套的大体积JSON文件结构;其中,对于不具有子结点的各层value值所对应的结点,为叶子结点;对于具有子结点的各层key键所对应的结点,为联结结点;
[0020] 步骤3,所述大体积JSON文件,自上向下共有n层,分别为第1层,第2层,...,第n层;其中,第n层的所有结点必然均为叶子结点;第2层到第n层的结点,包括叶子结点和/或联结结点;
[0021] 所述服务端首先遍历该大体积JSON文件的所有叶子结点,对于遍历到的每个叶子结点,表示为叶子结点C0,判断叶子结点C0对应的value值的体积,是否大于体积最小阈值M1,如果大于,则执行步骤4;如果不大于,则继续对下一个叶子结点进行遍历操作;
[0022] 步骤4,将叶子结点C0对应的value值生成一个新的小体积JSON文件D0,再生成一个用于唯一标识新的小体积JSON文件D0的标识符T0,新的小体积JSON文件D0采用标识符T0命名;然后,在大体积JSON文件中,将叶子结点C0对应的value值用标识符T0替换;
[0023] 如此不断循环,直到完成对大体积JSON文件中所有叶子结点C0的遍历,由此得到一次处理后的大体积JSON文件;
[0024] 步骤5,所述服务端对一次处理后的大体积JSON文件进行二次遍历,遍历方式为:
[0025] 所述服务端对一次处理后的大体积JSON文件的第n‑1层的各个联结结点进行遍历,对于遍历到的每个第n‑1层联结结点,表示为第n‑1层联结结点Cn‑1,判断第n‑1层联结结点Cn‑1的所有子孙结点的体积,是否大于体积最小阈值M1,如果大于,则执行步骤6;如果不大于,则执行步骤7;当对第n‑1层的各个联结结点均遍历结束后,执行步骤8;
[0026] 步骤6,将第n‑1层联结结点Cn‑1的所有子孙结点,保级其子孙间连接结构不变,生成一个新的小体积JSON文件Dn‑1,再生成一个用于唯一标识新的小体积JSON文件Dn‑1的标识符Tn‑1,新的小体积JSON文件Dn‑1采用标识符Tn‑1命名;然后,在一次处理后的大体积JSON文件中,将第n‑1层联结结点Cn‑1的所有子孙结点用标识符Tn‑1替换;然后返回步骤5,继续对其他第n‑1层联结结点Cn‑1进行遍历;
[0027] 步骤7,进一步判断第n‑1层联结结点Cn‑1当前具有的子孙结点的层数,是否达到层数最大阈值M2,如果没有达到,则返回步骤5,继续对其他第n‑1层联结结点Cn‑1进行遍历;如果达到,则返回步骤6;
[0028] 步骤8,所述服务端,采用步骤5‑步骤7的方法,对二次处理后的大体积JSON文件进行三次遍历,即:对二次处理后的大体积JSON文件的第n‑2层的各个联结结点进行遍历,如此不断循环,直到完成对第2层的各个联结结点的遍历;此时,通过采用标识符替换的方式,原始的大体积JSON文件变为小体积的JSON索引文件,同时得到多个相关联的新的小体积JSON文件形成的JSON文件组;并且,JSON索引文件的文件结构,与原始的大体积JSON文件的文件结构相同;JSON索引文件的IP地址,与原始的大体积JSON文件的IP地址相同;
[0029] 步骤9,用户端向服务端发送获取IP地址对应的JSON文件的请求消息;服务端通过IP地址定位到JSON索引文件,并将JSON索引文件发送给用户端;
[0030] 步骤10,用户端接收到完整的小体积的JSON索引文件,用户端对JSON索引文件的内容进行分析读取,当需要读取与第一目标标识符对应的具体内容时,向服务端发送获得第一目标标识符内容的请求;
[0031] 步骤11,服务端根据第一目标标识符,查找小体积JSON文件形成的JSON文件组,得到对应的小体积JSON文件,并发送给用户端;
[0032] 步骤12,用户端接收到小体积JSON文件后,对小体积JSON文件进行分析读取,如果小体积JSON文件仍然具有某个需要读取的第二目标标识符时,则用户端再向服务端获取与第二目标标识符对应的小体积JSON文件;如此反复,实现用户端按需请求JSON文件内容的效果。
[0033] 优选的,步骤4中,生成用于唯一标识新的小体积JSON文件D0的标识符T0,为新的小体积JSON文件D0的MD5值。
[0034] 本发明提供的一种大体积JSON文件拆分并按需请求的方法具有以下优点:
[0035] 在不破坏原有大体积JSON文件数据结构的基础上,将大体积JSON文件拆分为多个相关联的小体积JSON文件,并存储于服务端,方便需要使用这些JSON文件的各用户端按需请求所需的JSON文件,进而提高用户端请求所需JSON文件的效率和体验。

附图说明

[0036] 图1为本发明提供的一种大体积JSON文件拆分并按需请求的方法的流程示意图。

具体实施方式

[0037] 为了使本发明所解决的技术问题、技术方案及有益效果更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明。
[0038] 本发明提供一种大体积JSON文件拆分并按需请求的方法,在不破坏原有大体积JSON文件数据结构的基础上,将大体积JSON文件拆分为多个相关联的小体积JSON文件,并存储于服务端,方便需要使用这些JSON文件的各用户端按需请求所需的JSON文件,进而提高用户端请求所需JSON文件的效率和体验。参考图1,大体积JSON文件拆分并按需请求的方法包括以下步骤:
[0039] 步骤1,开发端将需拆分存储的大体积JSON文件以及预定义的拆分规则发送给服务端;其中,所述拆分规则包括小体积JSON文件的体积最小阈值M1以及小体积JSON文件允许的层数最大阈值M2;
[0040] 步骤2,所述大体积JSON文件的结构形式为:由多层嵌套形成的key键‑value值对构成;其中,位于根目录的key键K0为主key键,所述key键K0的所有子孙结点以及叶子结点,为所述key键K0的value值V0;
[0041] 所述key键K0具有多个位于第1层目录的子结点,每个子结点为第1层key键或第1层value值;其中,每个第1层key键的所有子孙结点以及叶子结点,为该第1层key键的value值;
[0042] 对于每个第1层key键,具有多个位于第2层目录的子结点,每个子结点为第2层key键或第2层value值;其中,每个第2层key键的所有子孙结点以及叶子结点,为该第2层key键的value值;
[0043] 依此类推,形成多层嵌套的大体积JSON文件结构;其中,对于不具有子结点的各层value值所对应的结点,为叶子结点;对于具有子结点的各层key键所对应的结点,为联结结点;
[0044] 步骤3,所述大体积JSON文件,自上向下共有n层,分别为第1层,第2层,...,第n层;其中,第n层的所有结点必然均为叶子结点;第2层到第n层的结点,包括叶子结点和/或联结结点;
[0045] 所述服务端首先遍历该大体积JSON文件的所有叶子结点,对于遍历到的每个叶子结点,表示为叶子结点C0,判断叶子结点C0对应的value值的体积,是否大于体积最小阈值M1,如果大于,则执行步骤4;如果不大于,则继续对下一个叶子结点进行遍历操作;
[0046] 步骤4,将叶子结点C0对应的value值生成一个新的小体积JSON文件D0,再生成一个用于唯一标识新的小体积JSON文件D0的标识符T0,新的小体积JSON文件D0采用标识符T0命名;然后,在大体积JSON文件中,将叶子结点C0对应的value值用标识符T0替换;
[0047] 如此不断循环,直到完成对大体积JSON文件中所有叶子结点C0的遍历,由此得到一次处理后的大体积JSON文件;
[0048] 实际应用中,生成用于唯一标识新的小体积JSON文件D0的标识符T0,为新的小体积JSON文件D0的MD5值。
[0049] 步骤5,所述服务端对一次处理后的大体积JSON文件进行二次遍历,遍历方式为:
[0050] 所述服务端对一次处理后的大体积JSON文件的第n‑1层的各个联结结点进行遍历,对于遍历到的每个第n‑1层联结结点,表示为第n‑1层联结结点Cn‑1,判断第n‑1层联结结点Cn‑1的所有子孙结点的体积,是否大于体积最小阈值M1,如果大于,则执行步骤6;如果不大于,则执行步骤7;当对第n‑1层的各个联结结点均遍历结束后,执行步骤8;
[0051] 步骤6,将第n‑1层联结结点Cn‑1的所有子孙结点,保级其子孙间连接结构不变,生成一个新的小体积JSON文件Dn‑1,再生成一个用于唯一标识新的小体积JSON文件Dn‑1的标识符Tn‑1,新的小体积JSON文件Dn‑1采用标识符Tn‑1命名;然后,在一次处理后的大体积JSON文件中,将第n‑1层联结结点Cn‑1的所有子孙结点用标识符Tn‑1替换;然后返回步骤5,继续对其他第n‑1层联结结点Cn‑1进行遍历;
[0052] 步骤7,进一步判断第n‑1层联结结点Cn‑1当前具有的子孙结点的层数,是否达到层数最大阈值M2,如果没有达到,则返回步骤5,继续对其他第n‑1层联结结点Cn‑1进行遍历;如果达到,则返回步骤6;
[0053] 步骤8,所述服务端,采用步骤5‑步骤7的方法,对二次处理后的大体积JSON文件进行三次遍历,即:对二次处理后的大体积JSON文件的第n‑2层的各个联结结点进行遍历,如此不断循环,直到完成对第2层的各个联结结点的遍历;此时,通过采用标识符替换的方式,原始的大体积JSON文件变为小体积的JSON索引文件,同时得到多个相关联的新的小体积JSON文件形成的JSON文件组;并且,JSON索引文件的文件结构,与原始的大体积JSON文件的文件结构相同;JSON索引文件的IP地址,与原始的大体积JSON文件的IP地址相同;
[0054] 步骤9,用户端向服务端发送获取IP地址对应的JSON文件的请求消息;服务端通过IP地址定位到JSON索引文件,并将JSON索引文件发送给用户端;
[0055] 步骤10,用户端接收到完整的小体积的JSON索引文件,用户端对JSON索引文件的内容进行分析读取,当需要读取与第一目标标识符对应的具体内容时,向服务端发送获得第一目标标识符内容的请求;
[0056] 步骤11,服务端根据第一目标标识符,查找小体积JSON文件形成的JSON文件组,得到对应的小体积JSON文件,并发送给用户端;
[0057] 步骤12,用户端接收到小体积JSON文件后,对小体积JSON文件进行分析读取,如果小体积JSON文件仍然具有某个需要读取的第二目标标识符时,则用户端再向服务端获取与第二目标标识符对应的小体积JSON文件;如此反复,实现用户端按需请求JSON文件内容的效果。
[0058] 经试验验证,原始的大体积JSON文件,达到十几M甚至几十M体积,经过本发明上述流程的拆分后,得到JSON索引文件的体积可以只有几百KB,主要用于记录key键字段以及key键字段之间的结构关系,而拆分后形成的每个小体积JSON文件的体积显著减小,实现用户端按需请求JSON文件的效果。
[0059] 本发明提供一种大体积JSON文件拆分并按需请求的方法,具有以下优点:
[0060] (1)本发明是一种将一个大体积JSON文件拆分为多个相关联的小体积JSON文件的技术,在不破坏原有大体积JSON文件数据结构的基础上,将大体积JSON文件拆分为多个相关联的小体积JSON文件,并存储于服务端,方便需要使用这些JSON文件的各用户端按需请求所需的JSON文件,进而提高用户端请求所需JSON文件的效率和体验;
[0061] (2)在开发过程中无需拆分主体的JSON文件的数据结构,同时可以配置拆分规则,最终由服务端自动拆分;因此,可灵活根据需求改变相应的拆分规则,实现对大体积JSON文件按不同需求灵活拆分的优点。
[0062] (3)对需要使用JSON文件的各用户端,只需要请求小体积的JSON索引文件,通过JSON索引文件,一方面,可以使用户端全面了解原始的大体积JSON文件的数据结构;另一方面,根据JSON索引文件,根据key键字段,可定位用户感兴趣的位置,再根据key键字段后面的标识符,实现对目标小体积JSON文件的按需请求,实现按需加载内容,在使用过程中并不需要真正了解各个小体积JSON文件之间的关系。
[0063] (4)实现按需加载,减少带宽不必要的浪费,减少请求时间,减少因网络波动等原因请求大体积JSON文件失败的概率,提升用户体验。
[0064] (5)用户体验上,有效减少了首次请求JSON索引文件(即主JSON文件)的等待时间,提高体验。
[0065] 以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视本发明的保护范围。