Как я могу динамически добавлять новый уровень к данным JSON в JavaScript?

#javascript #json

#javascript #json

Вопрос:

У меня есть два объекта JSON, и я хочу объединить их в один объект JSON. Кроме того, я хочу, чтобы они были добавлены в качестве подуровней в выходной объект JSON.

Объект JSON 1:

 { 
  Title: '7500',
  Year: '2019',
  Rated: 'R',
  Released: '18 Jun 2020',
  Runtime: '93 min',
  Genre: 'Action, Drama, Thriller'
}
 

Объект JSON 2:

 {
  Title: 'Deadpool',
  Year: '2016',
  Rated: 'R',
  Released: '12 Feb 2016',
  Runtime: '108 min',
  Genre: 'Action, Adventure, Comedy, Sci-Fi'
}
 

Желаемый результат:

 responses: {
  7500: {
    Title: '7500',
    Year: '2019',
    Rated: 'R',
    Released: '18 Jun 2020',
    Runtime: '93 min',
    Genre: 'Action, Drama, Thriller'
  },
  Deadpool: {
    Title: 'Deadpool',
    Year: '2016',
    Rated: 'R',
    Released: '12 Feb 2016',
    Runtime: '108 min',
    Genre: 'Action, Adventure, Comedy, Sci-Fi'
  }
}
 

Как я могу это сделать?

Ответ №1:

Вы можете добавить свои два объекта в массив, а затем использовать .map() для сопоставления каждого объекта с массивом формы [object.Title, object] . Используя этот новый массив, вы можете использовать Object.fromEntries() его для преобразования в объект. Помещая свои объекты в массив, вы можете расширить его для нескольких объектов movie:

 const movies = [{ Title: '7500', Year: '2019', Rated: 'R', Released: '18 Jun 2020', Runtime: '93 min', Genre: 'Action, Drama, Thriller' }, { Title: 'Deadpool', Year: '2016', Rated: 'R', Released: '12 Feb 2016', Runtime: '108 min', Genre: 'Action, Adventure, Comedy, Sci-Fi' }];

const result = Object.fromEntries(movies.map(obj => [obj.Title, obj]));
console.log(result); 

В качестве примечания, не существует такого понятия, как объект JSON.

Комментарии:

1. Что ж, это удивительно.

Ответ №2:

Вы могли бы использовать динамическое имя свойства (вычисляемое имя свойства)

 const obj1 = {
  Title: "7500",
  Year: "2019",
  Rated: "R",
  Released: "18 Jun 2020",
  Runtime: "93 min",
  Genre: "Action, Drama, Thriller",
};

const obj2 = {
  Title: "Deadpool",
  Year: "2016",
  Rated: "R",
  Released: "12 Feb 2016",
  Runtime: "108 min",
  Genre: "Action, Adventure, Comedy, Sci-Fi",
};

const obj = {
  [obj1.Title]: obj1,
  [obj2.Title]: obj2,
};

console.log(obj);