通过删除重复的列名来实现JSON数据优化

时间:2014-02-27 05:15:29

标签: json

我有一个基本的Json问题 - 我有一个JSON文件。此文件中的每个对象都重复了一列。

[
  {
    id: 1,
    name: "ABCD"
  },
  {
    id: 2,
    name: "ABCDE"
  },
  {
    id: 3,
    name: "ABCDEF"
  }
]

为了优化,我想删除重复的列名。

{
    "cols": [
        "id",
        "name"
    ],
    "rows": [
        [
            "1",
            "ABCD"
        ],
        [
            "2",
            "ABCDE"
        ]
    ]
}

我想要了解的是 - 这是一种更好的方法吗?这种格式有什么缺点吗?说写单元测试?

2 个答案:

答案 0 :(得分:2)

修改

第二种情况(编辑后)是有效的json。您可以使用json2csharp

将其派生到以下课程
public class RootObject
{
    public List<string> cols { get; set; }
    public List<List<string>> rows { get; set; }
}

关于有效json的一个非常重要的一点是除了重复列名(或一般的键)以表示json中的值之外别无他法。你可以测试你的json的有效性@ jsonlint.com

但是如果你想通过使用像gzip(同样)这样的压缩库来压缩json来优化json,那么我会推荐Json.HPack

根据这种格式,它有许多压缩级别,范围从0到4(4是最好的)。

在压缩级别0:

您必须从结构中删除键(属性名称),并在每个属性名称的索引0上创建标题。然后你的压缩json看起来像:

[
  [
    "id",
    "name"
  ],
  [
    1,
    "ABCD"
  ],
  [
    2,
    "ABCDE"
  ],
  [
    3,
    "ABCDEF"
  ]
]

通过这种方式,您可以根据需要在任何级别压缩json。但是为了使用任何json库,你必须首先将它解压缩为有效的json,就像你之前提供的重复属性名称一样。

有关您的信息,您可以查看不同压缩技术之间的比较:

enter image description here

答案 1 :(得分:1)

{
   "cols": [
       "id",
       "name"
   ],
   "rows": [
       "1",
       "ABCD"
   ], [
       "2",
       "ABCDE"     
   ], [
       "3",
       "ABCDEF"
  ]
}

在这种方法中,很难确定哪个值代表哪个项目(id,name)。如果您使用此JSON进行通信,那么您的第一种方法就很好。