Лучший способ структурировать формат данных JSON

#json #data-structures #dataset #structure

#json #структуры данных #набор данных #структура

Вопрос:

У меня есть вопрос о формате 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']},
          },
 }
 

Ответ №1:

 {
 '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']},
          },
 }
 

Это все еще избыточные данные по сети, только с меньшей полезной нагрузкой.

Я предложу придерживаться первой структуры. Но вместо object для набора данных того же типа вы можете использовать массив объектов, который является более подходящим :

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

Надеюсь, это поможет!