Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript将字符串解析为对象_Javascript_Arrays_Node.js - Fatal编程技术网

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