2012-07-09 35 views
0

所以我有這個非常大的對象,我用它來控制nodejs應用程序中的東西。有時我將這個對象存儲在數據庫[mysql]中,所以如果進程崩潰或重新啓動並且某些內容已被更改,則更改將被保存。很簡單。JSON.parse錯誤,不會解析我只是JSON.stringify'd

目的是這樣的: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]。數據):http://snippi.com/s/tknlgyo

任何幫助,將不勝感激,如果它的需要,我會添加更多的信息。 注意:auth代碼顯然已經改變,但它只是一個十六進制值,就像它下面的uid一樣,只是更長。

+1

你可以顯示保存代碼嗎?另外,當你運行console.log(b [0] .data])時,你能準確地告訴我們什麼是記錄嗎? – Dancrumb 2012-07-09 00:39:02

+0

已更新。它似乎不是逃避一些單引號。我以爲stringify爲你做了那個? – 2012-07-09 00:55:46

+0

不知道爲什麼你的字符串不解析好。轉義所有單引號後,它爲我解析:http://jsfiddle.net/rtoal/xHWM4/1/ – 2012-07-09 00:58:23

回答

0

console.log的輸出具有單引號。這意味着你正試圖解析的字符串有它們。在解析之前剝離它們。

例如,這裏是一個會話中使用節點:

> console.log("abc") 
abc 

您發佈的片段顯示,單引號。節點沒有把它們放在那裏,所以它們一定早些時候以某種方式獲得了你的數據。確保在生成和存儲字符串時禁止這些字符串。

+0

我已經更新了我原來的配置數組:http://snippi.com/s/g7w0c09,我仍然得到完全相同的東西。 – 2012-07-09 01:07:14

+0

問題不在於原始對象。單引號在JSON字符串內不是問題。問題在於,當你使用'console.log(b [0] .data)'時,你在開始和結束時用單引號分隔了一些東西。問題是_why是爲什麼Node.js用單引號記錄東西?_這些單引號如何繞過'b [0] .data'? – 2012-07-09 01:11:10

+0

從它stringify'd?我也不確定。 – 2012-07-09 01:13:24