将字符串转换为对象

时间:2015-05-13 04:04:05

标签: javascript json node.js

我正在我正在工作的nodejs环境中收到类似obj{a="foo",b="bar",c=3,d=4.0}的字符串,我正在尝试将此String转换为可引用的对象,如下所示:

{
    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;

所以是的,这是我正在尝试解析为三个不同的可访问对象的实际字符串。我知道在漫长的一天里我有一个大脑放屁,但是现在它给了我一笔钱。

1 个答案:

答案 0 :(得分:1)

首先用“:”替换“=”并删除obj infront

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);