使用jquery或javascript将逗号分隔的键和值字符串转换为对象

Comma Separated Key and Value string to Object using jquery or javascript

本文关键字:键和值 字符串 转换 对象 分隔 jquery javascript 使用      更新时间:2023-09-26

我使用如下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}

我想将我的属性转换为obj.这样的对象

您可以自己迭代并创建对象

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

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

选项2

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

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

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

UPD:

正如epascarelo所提到的,如果您有未引用的字符串值,如name: Jack,这种方法显然会失败。但如果你在那里放原始字符串,请注意它们可能包含逗号或空格或其他什么,所以你最好引用它们