我使用JavaScript读取HTML元素的属性:
<table data-option="pageSize:10, pageNumber:1, rowNumber:true"></table>
我会有一个这样的字符串:
attrs="pageSize:10, pageNumber:1, rowNumber:true";
我有一个像这样的键和值JavaScript对象:
obj={pageSize:12, pageNumber:1, rowNumber:true}
我想将我的attrs转换为像obj这样的对象。
答案 0 :(得分:0)
您可以自己迭代并创建对象
var attr = $('table').data('option');
var obj = {};
$.each(attr.split(','), function(index, item) {
var parts = $.map(item.split(':'), function(part) {
part = $.trim(part);
if ( +part == part ) return +part
else if ( part === 'true' ) return true
else if ( part === 'false') return false
else return part;
});
obj[parts[0]] = parts[1];
});
var attr = $('table').data('option');
var obj = {};
$.each(attr.split(','), function(index, item) {
var parts = $.map(item.split(':'), function(part) {
part = $.trim(part);
if ( +part == part ) return +part
else if ( part === 'true' ) return true
else if ( part === 'false') return false
else return part;
});
obj[parts[0]] = parts[1];
});
document.body.innerHTML = '<pre>' + JSON.stringify(obj, null, 4) + '</pre>';
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<table data-option="pageSize:10, pageNumber:1, rowNumber:true"></table>
答案 1 :(得分:-1)
存储整个json编码的字符串。
要将其从字符串转换为JSON.parse
的对象,您需要双引号。
使用正则表达式添加双引号from here,我们得到了所需的结果:
attrs = ("{" + attrs + "}").replace(/([{,])(\s*)([A-Za-z0-9_\-]+?)\s*:/g,'$1"$3":');
var obj = JSON.parse(attrs);
如 epascarello 所述,如果你有像name: Jack
这样的不带引号的字符串值,这种方法显然会失败。但是如果你把原始字符串放在那里,请注意它们可能包含逗号或空格或其他内容,所以你最好引用它们