Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
构造JSON数据格式的更好方法_Json_Data Structures_Dataset_Structure - Fatal编程技术网

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

构造JSON数据格式的更好方法,json,data-structures,dataset,structure,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'

我有一个关于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组数据需要更新第二组数据

{
 '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']},
          },
 }
这仍然是网络上的冗余数据,只是在较小的负载中

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

{
 '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”),您可以在网络的另一端使用多组集合数据结构来索引双向信息并支持查询

例如,在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'}
Set objectMap1=new HashSet();
//objectMap1['AAA']={'1','2','3'}
Set objectMap2=new HashSet();
//objectMap2['1']={'AAA','BBB','CCC'}
希望这有帮助

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'}