JavaScript将字符串解析为对象

JavaScript parsing a string to object

本文关键字:对象 字符串 JavaScript      更新时间:2023-09-26

我正在处理一个解析部分,将字符串值解析为对象的字符串。

我想一种方法是多次调用substr(),但如果有什么方法可以更清楚地做到这一点

例如,当我输入字符串时

USER='Howe', TEXT='foo'

USER='HOWE' TEXT='foo'

USER='HOWE',TEXT='foo'

在函数之后,一个对象将是这样的:

{USER:'HOWE, TEXT='foo'};

根据我以前的回答重新编写。

function toObj(str) {
  const a = str.split(/[,'s]+/);
  return a.reduce((p, c) => {
    const kv = c.replace(/'/g, '').split('=');
    p[kv[0]] = kv[1];
    return p;
  }, {});
}
toObj("USER='Howe', TEXT='foo'"); // { USER: "Howe", TEXT: "foo" }
toObj("USER='Howe',TEXT='foo'"); // { USER: "Howe", TEXT: "foo" }
toObj("USER='Howe' TEXT='foo'"); // { USER: "Howe", TEXT: "foo" }

演示

这不是JSON的有效对象语法。你可以这样做:

var text = '{ "USER":"Howe", "TEXT":"foo" }';
var obj = JSON.parse(text);
console.log(text, obj);

然后您可以简单地通过obj.USERobj.TEXT引用属性。

编辑:经过讨论

如果你想让用户能够在两个字段上搜索,我建议你做如下操作(当然,你可以将其扩展到你想要的任意多个字段)。

<script>
function search() {
    var userValue = document.getElementById('txtUser').value;
    var textValue = document.getElementById('txtText').value;
    var jsonText = '{ "USER":"' + userValue + '", "TEXT":"' + textValue + '" }';
    console.log(jsonText);
    var json = JSON.parse(jsonText);
    console.log(json);
    // Do whatever you wish with your created object here...
}
</script>
<input id="txtUser" value="foo" type="text">
<input id="txtText" value="bar" type="text">
<button onclick="search();">Submit</button>

您可以使用正则表达式来解析输入字符串中的键和值:

function convert(s) {
  var m = s.match(/USER='(.*)'.*TEXT='(.*)'/);
  return {
    USER: m[1],
    TEXT: m[2]
  }
}
console.log(convert("USER='HOWE' TEXT='foo'"));

match表达式使用分组(将"matches"括在括号中)来捕获值,然后这些值最终会出现在m数组中。

convert函数将返回一个JavaScript对象。如果您希望将其转换为JSON字符串,请使用JSON.parse.

JSBin:https://jsbin.com/fefufehibo/edit?js,控制台

如果您真的只想将这两个值拆分为一个数组,您可以执行以下操作:

str.split(',');

但实际上听起来你想把它改成一个有键、值对的对象,而不是一个数组。

你能更具体一点吗?您想要解析的确切字符串是什么?