つーか、やってみればわかるのにな
priceをpliceと書き間違えるようなやつじゃ無理かw

var hash = {price: 100, size: "L"};

$('#id').data('value', hash);
console.log($('#id').data('value')); // => {price: 100, size: "L"}

$('#id').attr('data-value', hash );
console.log($('#id').attr('data-value')); => [object Object]


HTML属性用のattrだと文字列化されるからハッシュを入れることはできない



↓はおまけ。attrだと文字列化されるから数値を入れても文字列に変えられてしまう

$('#id').data(hash);
console.log(typeof $('#id').data('price')); => number

$('#id').attr(hash); // data-を付けずに、price属性、size属性を作ってるからHTML5的には違反
console.log(typeof $('#id').attr('price')); => string