逗号使用jquery或javascript将Key和Value字符串分隔为Object

时间:2015-12-26 12:56:06

标签: javascript jquery json string object

我使用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这样的对象。

2 个答案:

答案 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)

选项1。

存储整个json编码的字符串。

选项2。

要将其从字符串转换为JSON.parse的对象,您需要双引号。

使用正则表达式添加双引号from here,我们得到了所需的结果:

attrs = ("{" + attrs + "}").replace(/([{,])(\s*)([A-Za-z0-9_\-]+?)\s*:/g,'$1"$3":');
var obj = JSON.parse(attrs);

UPD:

epascarello 所述,如果你有像name: Jack这样的不带引号的字符串值,这种方法显然会失败。但是如果你把原始字符串放在那里,请注意它们可能包含逗号或空格或其他内容,所以你最好引用它们