构造JSON数据格式的更好方法

时间:2019-04-19 10:53:55

标签: json data-structures dataset structure

我对JSON格式有疑问,以构建我的数据。例如,我有以下JSON数据结构格式:

{
 'AAA': {
          '1': {Sample Data 1},
          '2': {Sample Data 2},
          '3': {Sample Data 3},
          },
 'BBB': {
          '1': {Sample Data 1},
          '3': {Sample Data 3},
          '4': {Sample Data 4},
          },
 'CCC': {
          '1': {Sample Data 1},
          '3': {Sample Data 2},
          },
 }

根据上面的数据,我可以知道对象'AAA'包含对象'1','2','3';其中对象“ BBB”包含“ 1”,“ 3”,“ 4” ...等。我的问题是,如何构造数据以知道对于对象“ 1”,还有对象“ AAA”,对象“ BBB”和对象“ CCC”?无需准备如下所示的第二组数据,而是引入冗余数据并更新一组数据,而需要更新第二组数据。

{
 '1': {
          'AAA': {Sample Data A},
          'BBB': {Sample Data B},
          'CCC': {Sample Data C},
          },
 '2': {
          'AAA': {Sample Data A},
          },
 '3': {
          'AAA': {Sample Data A},
          'BBB': {Sample Data B},
          'CCC': {Sample Data C),
          },
 '4': {
         'BBB': {Sample Data B},
          },
}

是否有更好的方法/技术来构造我的数据,以便可以轻松地从不同维度获取数据集?

我对这种方式的想法可以达到我猜想的相同目标(或以其他方式在对象1,2,3,4中包括“键”),但不确定是否是构造数据的好方法,因为仍然需要如果引入了新对象(例如对象“ DDD”),则可以手动更新“键”。示例:

{
 'AAA': {
          '1': {Sample Data 1, keys: ['AAA', 'BBB', 'CCC']},
          '2': {Sample Data 2, keys: ['AAA','CCC']},
          '3': {Sample Data 3, keys: ['AAA', 'BBB', 'CCC']},
          },
 'BBB': {
          '1': {Sample Data 1, keys: ['AAA', 'BBB', 'CCC']},
          '3': {Sample Data 3, keys: ['AAA', 'BBB', 'CCC']},
          '4': {Sample Data 4, keys: ['BBB']},
          },
 'CCC': {
          '1': {Sample Data 1, keys: ['AAA', 'BBB', 'CCC']},
          '3': {Sample Data 2, keys: ['AAA','CCC']},
          },
 }

1 个答案:

答案 0 :(得分:0)

{
 'AAA': {
          '1': {Sample Data 1, keys: ['AAA', 'BBB', 'CCC']},
          '2': {Sample Data 2, keys: ['AAA','CCC']},
          '3': {Sample Data 3, keys: ['AAA', 'BBB', 'CCC']},
          },
 'BBB': {
          '1': {Sample Data 1, keys: ['AAA', 'BBB', 'CCC']},
          '3': {Sample Data 3, keys: ['AAA', 'BBB', 'CCC']},
          '4': {Sample Data 4, keys: ['BBB']},
          },
 'CCC': {
          '1': {Sample Data 1, keys: ['AAA', 'BBB', 'CCC']},
          '3': {Sample Data 2, keys: ['AAA','CCC']},
          },
 }

这仍然是网络上的冗余数据,只是有效载荷较小。

我建议坚持第一种结构。但是,您可以使用更合适的对象数组来代替一组相同类型数据的对象:

{
 'AAA': [
          '1': {Sample Data 1},
          '2': {Sample Data 2},
          '3': {Sample Data 3},
         ],
 'BBB': [
          '1': {Sample Data 1},
          '3': {Sample Data 3},
          '4': {Sample Data 4},
         ],
 'CCC': [
          '1': {Sample Data 1},
          '3': {Sample Data 2},
         ],
 }

并提供双向查询(对于对象“ 1”,还具有对象“ AAA”,对象“ BBB”和对象“ CCC”),可以使用多个 set集网络另一端的数据结构可为双向信息建立索引并支持查询。

例如,在Java中,它看起来像这样:

Set<Set<String>> objectMap1 = new HashSet<Set<String>>();
// objectMap1['AAA'] = {'1', '2', '3'}

Set<Set<String>> objectMap2 = new HashSet<Set<String>>();
// objectMap2['1'] = {'AAA', 'BBB', 'CCC'}

希望这会有所帮助!