拆分由'='符号分隔的pipe道分隔键 – 值对
我们正在接收一个input参数值作为pipe道分隔的键值对,用=
符号分隔。 例如:
"|User=0101|Name=ImNewUser|IsAdmin=0|RefId=23ae2123cd223bf235|"
所以格式是: |KEY=VALUE|KEY_2=VALUE_2|....|KEY_n=VALUE_n|
我需要把它分成一个JSON对象。 所以,我的对象应该是:
{ 'User':'0101', 'Name':'ImNewUser', 'IsAdmin':'0', 'RefId'='23ae2123cd223bf235' }
什么是最好的办法,因为有多种select:
- 我可以用
|
分割 并再次在每个元素分裂=
。 - 我可以依靠正则expression式并进行stringreplace。
- 将其拆分为
=
删除尾部|
符号并将两个不同的数组与索引关联。
任何人都可以告诉我这样做最好/最有效的方法在JavaScript(在Node.js编程)?
第一个听起来不错:
var str = "|User=0101|Name=ImNewUser|IsAdmin=0|RefId=23ae2123cd223bf235|"; var result = {}; str.split('|').forEach(function(x){ var arr = x.split('='); arr[1] && (result[arr[0]] = arr[1]); });
如果你决定使用正则expression式,请确保它阻止像这样的正则expression式:
var result = {}; s.replace(/([^=|]+)=([^|]*)/g, function(noStep3, a, b) { result[a] = b; });
var str = "|User=0101|Name=ImNewUser|IsAdmin=0|RefId=23ae2123cd223bf235|"; var result = {}, name; str.substring(1, str.length-1).split(/\||=/).forEach(function(item, idx){ idx%2 ? (result[name] = item) : (name = item); });
我只是使用正则expression式来分组(见这里 )每个KEY=VALUE
对,然后遍历它们来填充JSON对象。 所以你可以有这样的事情:
var re = /(([^=\|]+)=([^=\|]+))/g; var match; var myString = "|User=0101|Name=ImNewUser|IsAdmin=0|RefId=23ae2123cd223bf235|"; while (match = re.exec(myString)) { console.log(match); // first iteration returns ["User=0101","User=0101","User","0101"] and so on }
最干净的方式,你可以修改源分割不同的分隔符。
https://gist.github.com/allensarkisyan/5873977#file-parsequerystring-js
`/** * @name - parseQueryString * @author - Allen Sarkisyan * @license - Open Source MIT License * * @description - Parses a query string into an Object. * - Optionally can also parse location.search by invoking without an argument */` ` function parseQueryString(queryString) { var obj = {}; function sliceUp(x) { x.replace('?', '').split('&').forEach(splitUp); } function splitUp(x) { var str = x.split('='); obj[str[0]] = decodeURIComponent(str[1]); } try { (!queryString ? sliceUp(location.search) : sliceUp(queryString)); } catch(e) {} return obj; } `