JavaScript将字符串解析为对象
我正在处理一个解析部分,将字符串值解析为字符串或对象 我认为一种方法是多次调用JavaScript将字符串解析为对象,javascript,arrays,node.js,Javascript,Arrays,Node.js,我正在处理一个解析部分,将字符串值解析为字符串或对象 我认为一种方法是多次调用substr(),但是否有更清晰的方法 例如,当我输入字符串时 USER='Howe', TEXT='foo' 或 或 函数之后,对象如下所示: {USER:'HOWE, TEXT='foo'}; var text = '{ "USER":"Howe", "TEXT":"foo" }'; var obj = JSON.parse(text); console.log(text, obj); 如果您真的只想将这两个
substr()
,但是否有更清晰的方法
例如,当我输入字符串时
USER='Howe', TEXT='foo'
或
或
函数之后,对象如下所示:
{USER:'HOWE, TEXT='foo'};
var text = '{ "USER":"Howe", "TEXT":"foo" }';
var obj = JSON.parse(text);
console.log(text, obj);
如果您真的只想将这两个值拆分为一个数组,可以执行以下操作:
str.split(',');
但实际上,听起来您想要将其更改为具有键、值对的对象,而不是数组
你能说得更具体些吗?您要解析的确切字符串是什么?这对于JSON来说不是非常有效的对象语法。你可以这样做:
{USER:'HOWE, TEXT='foo'};
var text = '{ "USER":"Howe", "TEXT":"foo" }';
var obj = JSON.parse(text);
console.log(text, obj);
然后,您只需通过obj.USER
和obj.TEXT
引用属性即可
编辑:讨论后…
如果您希望让用户能够搜索两个字段(当然,您可以将其扩展到任意多个字段),我建议您执行以下操作
函数搜索(){
var userValue=document.getElementById('txtUser').value;
var textValue=document.getElementById('txtText').value;
var jsonText='{“USER”:“'+userValue+'”,“TEXT”:“'+textValue+'”}';
log(jsonText);
var json=json.parse(jsonText);
log(json);
//使用此处创建的对象执行任何您希望的操作。。。
}
提交
您可以使用正则表达式从输入字符串中解析出键和值:
function convert(s) {
var m = s.match(/USER='(.*)'.*TEXT='(.*)'/);
return {
USER: m[1],
TEXT: m[2]
}
}
console.log(convert("USER='HOWE' TEXT='foo'"));
该表达式使用分组(将“匹配项”括在括号中)来捕获值,然后这些值最终位于m
数组中
convert
函数将返回一个JavaScript对象。如果希望将其转换为JSON字符串,请使用
JSBin:从重新加工
我有点困惑。您是说要将多次出现的
USER
和TEXT
分组到一个对象数组中吗?所以USER='HOWE',TEXT='foo',USER='2',TEXT='3'
将是[{USER:'HOWE',TEXT:'foo'},{USER:'2',TEXT:'3'}]
你能澄清一下吗?是否要使用array.push(字符串)将字符串添加到数组中;或者更改object.property=string;的对象中某个项的值?对不起,伙计们,请编辑这个问题,我想把一个字符串解析成一个具有索引和属性的对象,谢谢@ste2425I刚刚更新了这个问题,我想将字符串解析为一个带有索引和键的对象,非常感谢。很好,字符串实际上是供用户执行搜索功能的。因此,我不期望用户会键入JSON语法之类的语法。然后,您所需要的就是从用户那里获取值并自己构造JSON文本。不要让你的用户像那样输入文本。两个文本框,抓取值,构造JSON文本,解析它,完成工作:)好吧,我正在为我的web应用程序实现一个搜索模块,有一个像Twitter一样的搜索栏,我想支持一个高级搜索功能。。这就是我问这个问题的原因。。我知道你的建议是更好的解决办法。。但是我不是一个有经验的JavaScript程序员,所以..你不需要是一个有经验的JS程序员。您只需要实现一些基本的HTML,然后像我在上面指定的那样构造字符串,例如var jsonText='{“USER”:“'+userValue+”,“TEXT”:“+textValue+”}”代码>。我将用一个例子更新我的答案:)你肯定不希望你的用户输入那个字符串。但是,如果您必须这样做,那么您应该首先解析它,然后从中创建json,然后简单地将json解析为一个对象。非常感谢。。但事实上,我将在后天展示这个应用程序。。所以我选择先完成一个复杂的搜索文本,然后我想用你的想法继续开发这个应用程序,谢谢。
function convert(s) {
var m = s.match(/USER='(.*)'.*TEXT='(.*)'/);
return {
USER: m[1],
TEXT: m[2]
}
}
console.log(convert("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" }