Javascript 将字符串转换为对象

Javascript 将字符串转换为对象,javascript,json,node.js,Javascript,Json,Node.js,在我工作的nodejs环境中,我接收到一个字符串,如obj{a=“foo”,b=“bar”,c=3,d=4.0},我正试图将该字符串转换为一个可引用的对象,如下所示: { a : "foo", b : "bar", c : 3, d : 4.0 } 当然分配给了obj 我使用了无数的格式化技巧,但每当调用JSON.parse()时,都会出现意外的字符错误。通常在它看到的第一个字母字符上 我的下一步是编写几个嵌套循环来手动完成所有的赋值,但我希望有人能为我指明正确

在我工作的nodejs环境中,我接收到一个字符串,如
obj{a=“foo”,b=“bar”,c=3,d=4.0}
,我正试图将该字符串转换为一个可引用的对象,如下所示:

{
    a : "foo",
    b : "bar",
    c : 3,
    d : 4.0
}
当然分配给了obj

我使用了无数的格式化技巧,但每当调用JSON.parse()时,都会出现意外的字符错误。通常在它看到的第一个字母字符上

我的下一步是编写几个嵌套循环来手动完成所有的赋值,但我希望有人能为我指明正确的方向,告诉我如何解析它

编辑:好的,故事还有一点,我想我应该省略它,但我想解释一切都会有帮助

我收到的实际数据包如下所示

ack{a=“000000061”,b=0,c=2.0}\rb{a=244.0,b=255,c=4.0}\rc{a=6.0,b=55,c=55}endack

是的,这就是我试图解析成三个不同的可访问对象的实际字符串。我知道我一整天都在放屁,但是的,我现在正忙着挣钱。

首先将“=”替换为“:”并删除前面的obj

str = str.replace(/=/g, ":").replace("obj{", "{")
因为它不是正确的json格式(但可以被js解析器读取),所以我们不能使用json.parse,但可以使用eval

eval("var obj = " + str);
显然,这种技术有一些假设,例如=总是表示冒号,而您不会将obj{作为文本(但后者可以通过简单的子字符串方法修复)

请记住,eval也被认为是邪恶的,因此使用它的风险由您自己承担。想象一下,如果用户发送坏数据,他们很容易进入您的解析器并运行恶意的东西。但希望这能给您提供一个更好的解决方案的想法或灵感

您可以进一步使用

str = 'obj{a="foo",b="bar",c=3,d=4.0}'
str = str.substr(3,str.length).replace(/([{,])([\w])=/g, '$1\"$2\":');
var obj = JSON.parse(str);

为什么不为文本使用实际的JSON?(显示的字符串不是JSON;它是什么?)什么是
obj
?如果这是一个全局变量,那么这种序列化格式似乎容易受到类似
eval
的入侵。第一个建议。当定义对象的格式已经存在并且在您的环境中构建了经过良好测试的代码时,请尝试使用现有的JSON格式和解析代码,而不是创建own格式,然后您必须为其构建自己的解析器。这里真的没有理由重新发明。现在的其他环境都知道如何创建JSON,因为它现在是一种通用交换格式。
obj
实际上只是文本其余部分之前的一些字符。这些数据来自另一台计算机我的工作就是以我展示的格式简单地报告各种测量结果。本着乐于助人的精神,尽管有点老套,但还是继续使用正则表达式(类似于
/^(+)\{/
匹配第一组字符。然后可以使用子字符串将它们从字符串中删除。然后解析剩余的字符,并将其分配给变量的属性,如
context[varname]=JSON.parse(余数)
我发誓我试过这个和其他很多东西,但都没能成功!我把所有东西都弄乱了,得到了JSON.parse()不过,这是一条可行的途径。通过的数据是非常可预测的,只有几个字符串和浮点数,因此不需要进行求值。非常感谢!非常感谢。为了避免求值并保留名称,我使用了以下组合:
p=str.split(“{”);
m[p[0]=JSON.parse(“{\”+p[1]。replace(/=/g,“\:”)。replace(/,/g,“,\”));
其中
m
是一个可全局访问的不同对象。