JSON динамически добавляет вложенные вложенные объекты с помощью JS или jQuery

#json #local-storage #key-value

#json #локальное хранилище #ключ-значение

Вопрос:

Я создаю корзину услуг на стороне клиента, где услуги сгруппированы внутри 3-х уровней группировок, таких как

 product[SECTION] [SERVICE] [ITEM] product['carpet']['cleaning']['room'] = {'qty':2,'price':15}; product['carpet']['cleaning']['hall'] = {'qty':1,'price':10}; product['carpet']['protecting']['hall'] = {'qty':1,'price':10};  product['carpet']['deodorize']['hall'] = {'qty':1,'price':10}; product['leather']['cleaning']['sofa'] = {'qty':1,'price':10};  

хотите сгенерировать вышеуказанную структуру json.

мои текстовые поля выглядят так, как показано ниже, data-section data-service data-tem и data-price

 lt;input type="text" class="form-control input-number"   data-price="15" data-section="carpet" data-item="room" data-service="protect" /gt;  

Мой код JS выглядит так, как показано ниже, но он добавляет только текущий элемент, перезаписывая все остальные службы и разделы.

 $(function(){  $('.input-number').change(function(){  var section = $(this).attr('data-section');  var item = $(this).attr('data-item');  var service = $(this).attr('data-service');  var qty = $(this).val();  var unitprice = $(this).attr('data-unitprice');    addProduct(section,item,service,qty,unitprice);  }); });  function addProduct(section,item,service,qty,unitprice){  let products = {};  if(localStorage.getItem('products')){  products = JSON.parse(localStorage.getItem('products'));  }   products['"' section '"'] =  {   ['"' service '"'] : {  ['"' item '"'] : {  'unitprice' : unitprice, 'qty': qty  }  }   };     localStorage.setItem('products', JSON.stringify(products)); }  

Как я могу добавлять только вместо перезаписи вложенных элементов?

ОТРЕДАКТИРОВАНО Я отредактировал свою функцию добавления продукта, как показано ниже, но все еще не получил желаемого результата

 function addProduct(section,item,service,qty,unitprice){  let products = {};  if(localStorage.getItem('products')){  products = JSON.parse(localStorage.getItem('products'));  }     var v = {  [service] : {  [item] :{  "qty":qty,'unitprice':unitprice  }  }  };   products.push( section, v );     localStorage.setItem('products', JSON.stringify(products)); }  Object.prototype.push = function( key, value ){  if(typeof value === 'object'){   var k = Object.keys(value)[0];  value.push( k, value[k] );  }  this[ key ] = value;  return this; }  

Ответ №1:

Во-первых, это не очень хороший способ хранения ваших данных.

Вот лучший способ хранения ваших данных. Это гораздо проще понять, если вы видите это как объект, потому что в javascript это одно и то же

 //example this 2 data is store the same way in javascript var product['carpet']['cleaning']['room'] = {'qty':2,'price':15};  var product = [{  carpet: {  cleaning: {  room: {'qty':2,'price':15}  }  } }]  // my solution would be just save section, service and item in the object, example: var product = []; var v = {  section: 'carpet',  service: 'cleaning',  item: 'room'  qty:2,  price:15 } product.push(v)