繁体   English   中英

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

[英]How Do I Parse a Pipe-Delimited String into Key-Value Pairs in Javascript

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

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

每个4个大写字母的单词(PLNC,SUBD和CITY)将作为键,而紧随其后的管道中的单词将作为值(对于PLNC,第一个单词是未定义的,第一个对于SUBD是“松树”,对于CITY是“迈尔斯堡”。)

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

最好的方法是什么?

我只是意识到,从技术上讲,这是具有有趣的行尾的csv格式。 这是有局限性的,因为您的变量值不能包含| 或<br>,因为它们是定义字符串结构的标记。 您当然可以逃脱它们。

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);

如果您有下划线 (如果没有下划线 ,那么只需在其网页上打开您的控制台即可尝试一下,因为其中包括了下划线:)

然后玩一下。 这是您的旅程的起点:

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

尝试

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;
}

演示

这将对问题中的特定数据字符串起作用。

它也可以在相同通用格式的其他数据字符串上工作,但是依赖于:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM