我正在我正在工作的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;
所以是的,这是我正在尝试解析为三个不同的可访问对象的实际字符串。我知道在漫长的一天里我有一个大脑放屁,但是现在它给了我一笔钱。
答案 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);