JSON.parse错误,不解析我只是JSON.stringify'd的东西

时间:2012-07-09 00:33:10

标签: mysql json node.js

所以我有一个非常大的对象,我用它来控制nodejs app中的东西。有时我会将此对象存储在数据库[mysql]中,因此如果进程崩溃或重新启动并且某些内容已更改,则更改将被保存。很简单。

对象是:http://snippi.com/s/z5nq0v5

它被定义为global.config。

所以要存储,我使用我的保存功能:

    client.query('SELECT data FROM settings WHERE (id = \''+ config.room +'\')',
        function(a, b, c) {
            if (!b[0]) {
                client.query('INSERT INTO settings (id, data) VALUES (?, ?)', [config.room, JSON.stringify(config)],
                    function (a) { if (a) throw a;Log("Saved settings"); }
                );
            } else {
                client.query('UPDATE settings SET data="?" WHERE id="'+config.room+'"',
                    [JSON.stringify(config)],
                function (a) { if (a) throw a;Log("Saved settings"); }
            );
            }
        }
    );

这似乎有效。但是,当我在更改某些内容后尝试加载它并保存时, 我收到一个错误。这是加载代码:

    client.query('SELECT data FROM settings WHERE (id = \''+ config.room +'\')',
        function(a, b, c) {
            console.log(b.length);
            if (a) return console.log(a);
            if (!b[0]) return db.save("settings");
            console.log(b[0].data);
            config = JSON.parse(b[0].data);
            Log("Loaded Settings");
        }
    );

正如您所看到的,我正在做的就是调用我之前刚刚编译的对象的JSON.parse()。然而,我收到了一个错误。错误是

undefined:1
3Th0seB310W","ui
^
SyntaxError: Unexpected token '

但是在它所谈论的领域没有'。如果您在那里引用该对象。

这些是console.log(b [0] .data)的结果:http://snippi.com/s/tknlgyo

任何帮助将不胜感激,如果需要,我会添加更多信息。 注意:auth代码显然已被更改,但它只是一个十六进制值,如下面的uid,只是更长。

1 个答案:

答案 0 :(得分:0)

console.log的输出有单引号。这意味着您尝试解析的字符串具有它们。在解析之前去除它们。

例如,这是一个使用节点的会话:

> console.log("abc")
abc

您发布的代码段显示了单引号。节点没有把它们放在那里,所以他们必须早些时候以某种方式获取你的数据。确保在生成和存储字符串时禁止这些。