我有一个基本的Json问题 - 我有一个JSON文件。此文件中的每个对象都重复了一列。
[
{
id: 1,
name: "ABCD"
},
{
id: 2,
name: "ABCDE"
},
{
id: 3,
name: "ABCDEF"
}
]
为了优化,我想删除重复的列名。
{
"cols": [
"id",
"name"
],
"rows": [
[
"1",
"ABCD"
],
[
"2",
"ABCDE"
]
]
}
我想要了解的是 - 这是一种更好的方法吗?这种格式有什么缺点吗?说写单元测试?
答案 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,就像你之前提供的重复属性名称一样。
有关您的信息,您可以查看不同压缩技术之间的比较:
答案 1 :(得分:1)
{
"cols": [
"id",
"name"
],
"rows": [
"1",
"ABCD"
], [
"2",
"ABCDE"
], [
"3",
"ABCDEF"
]
}
在这种方法中,很难确定哪个值代表哪个项目(id,name)。如果您使用此JSON进行通信,那么您的第一种方法就很好。