表达JSON中每个元素数组中重复键的最佳方法

5

我正在构建一个包含多个地址的JSON。 我担心JSON大小可能会变得太大,并且在浏览器和JS解析期间会成为瓶颈。 由于可以看到,不同的键,即“ID”,“FirmName”,“Address1”,“Address2”,“City”,“State”,“Zip5”,“Zip4”必须针对每个地址重复,这实际上大大增加了json的大小。

  • Is there any way I could eliminate the need of necessarily having these keys in the JSON yet have those values for each address? If I had to represent values of "ID", "Firmname", etc as an array [Ex: ["0","firmname","address1here",..] should I be concerned about the order of the values?

  • Will parsing become obscure if I represent them as an array of values (rather than multiple key value pair)?

  • Will it be a "good" JSON structure (as I would have to forfeit the readability) if I choose to represent it as an array of values directly?

      "Address": [
        {
            "-ID": "0",
            "FirmName": "firmname",
            "Address1": "address1here",
            "Address2": "13 infinite loop",
            "City": "new york",
            "State": "NY",
            "Zip5": "zip5here",
            "Zip4": "zip4here"
        },
        {
            "-ID": "1",
            "FirmName": "firmhere",
            "Address1": "address1here",
            "Address2": "1 Smith Ct ",
            "City": "San Predo",
            "State": "CA",
            "Zip5": "ziphere",
            "Zip4": "ziphere1"
        },
        {
            "-ID": "1",
            "FirmName": "firmhere",
            "Address1": "address1here",
            "Address2": "12 John Rd ",
            "City": "Newark",
            "State": "PA",
            "Zip5": "ziphere",
            "Zip4": "ziphere1"
        }
    ]
    
感谢您的意见反馈。

根据您提供的信息,无法进行评估或回答。 - pvg
将其作为数组格式放置将会将大小减少到现在大小的约50%。您认为哪个大小对于100%而言是问题,但对于50%而言不是问题? - trincot
“这实际上会显著增加JSON的大小。”为什么这是个问题?你担心磁盘大小、传输大小还是其他什么? - Felix Kling
文件大小(可能需要存储在云端),以及传输问题。 - user1639485
1
启用Gzip压缩后,对于文件大小而言,重复键不应该成为一个大问题。 - Marat Tanalin
建议您不要没有正当理由地过度优化。请考虑,现在您需要进行的解析操作会增加额外的工作量。 - charlietfl
1个回答

4
首先,大型JSON对象绝对可以崩溃浏览器,但我们所说的是大型对象。[请参见链接以获取有关跨浏览器性能的有用分析]因此,首先根据这些数据和一些实际测试,您应该确定您的对象是否太大了。(因为如果它不太大,那么为什么费心呢?)
现在,假设您将数据表示为数组确实会提高性能。这是现实生活中的情况;您有限制;您牺牲了可读性以换取性能/空间。如果您是唯一需要处理JSON的人,则此更改完全可以接受(我的意思是,您还能做什么呢?)。 (但是,如果相关,则应征询同事和/或API用户的意见*。)我建议向JSON对象添加一个属性,该属性按顺序在数组中表示您的键,例如,
dataKey: ["ID","FirmName","Address1","Address2"]

当您解析对象时,可以添加一个包装函数来请求第 i 个“firmName”:

data.fetch(i, "firmName")

该函数可以使用此数组获取数据,而无需在代码的另一端硬编码键顺序的知识。

这使得您的对象自我记录,并且您应该在官方文档中明确说明架构。

希望这可以帮助您!

*如果这对您的用户群体不起作用,我建议将对象分解为块:记录1-50、51-100等。这是Web应用程序在现实生活中处理大量数据的方式。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接