如何在Javascript中将管道分隔的字符串解析为键值对

时间:2014-12-01 23:21:39

标签: javascript jquery parsing javascript-objects

我想将以下类型的字符串解析为Javascript对象中的键值对:

var stringVar = 'PLNC||0|EOR|<br>SUBD|Pines|1|EOR|<br>CITY|Fort Myers|1|EOR|<br>';

4个大写字母(PLNC,SUBD和CITY)的每个单词都是一个键,而紧接着的管道中的单词是值(对于PLNC,第一个单词将是未定义的) ,SUBD的那个将是'Pines',CITY的那个将是'迈尔斯堡')。

请注意,'| EOR |
'紧跟在每个键值对之前。

这样做的最佳方式是什么?

3 个答案:

答案 0 :(得分:2)

我刚刚意识到它在技术上是一种带有趣的行结尾的csv格式。这有一些限制,因为您的变量值不能包含任何|或者&lt; BR&GT;因为它们是定义字符串结构的标记。你当然可以逃脱它们。

var stringVar = 'PLNC||0|EOR|<br>SUBD|Pines|1|EOR|<br>CITY|Fort Myers|1|EOR|<br>';

function decodeString(str, variable_sep, line_endings)
{
    var result = [];
    var lines = str.split(line_endings);
    for (var i=0; i<lines.length; i++) {
        var line = lines[i];
        var variables = line.split(variable_sep);
        if (variables.length > 1) {
            result[variables[0]] = variables[1];
        }
    }
    return result;
}

var result = decodeString(stringVar, "|", "<br>");

console.log(result);

答案 1 :(得分:0)

如果你有underscore(如果你没有,那么只需在他们的网页上打开你的控制台就可以试试这个,因为他们有下划线:)

然后再玩一下吧。这是您旅程的开始:

_.compact(stringVar.split(/<br>|EOR|\|/))

答案 2 :(得分:0)

尝试

function parse(str) {
    var str = str.replace(/<br>/gi);
    console.log(str);
    var arr = str.split('|');
    var obj = {};
    for (var i=0; i<arr.length; i=i+4) {
        var key = arr[i] || '';
        var val_1 = arr[i+1] || '';
        var val_2 = arr[i+2] || '';
        if(key) {
            obj[key] = val_1 + ':' + val_2; //or similar
        }
    }
    return obj;
}

DEMO

这将适用于问题中的特定数据字符串。

它也适用于相同通用格式的其他数据字符串,但依赖于:

  • <br>在解析之前可以丢弃
  • 每个记录都是由|描述的4个字符串元素的组(管道)
  • 每条记录的第一个元素是键
  • 第二和第三个元素组合形成值
  • 第四个元素是可废弃的。