2017-09-13 13 views
1
// My input String 
    // Could be on : true, on : false, bri : 255, etc, etc 
    var inputString = 'on : true' 
    console.log(inputString); 
    var wrongResult = { inputString } 
    console.log(wrongResult); 

    // The result that I am trying to achieve 
    var desiredResult = { 
    on : true 
    } 
    console.log(desiredResult); 

運行:https://repl.it/LCDt/4節點JS字符串中波形括號

我創建了上面的代碼片段,以證明我遇到的問題。我有一個我收到的輸入字符串,可以是「on:true」,「on:false」,「bri:250」,「sat:13」等。將這些數據發佈到服務器時,在上面被看作是「願望結果」。

但是,如果將一個字符串(如'on:true')放入一個變量中,並將其放在{}中,它似乎總會創建一個字典,其中變量名稱爲鍵,字符串本身爲值。

有人可以解釋爲什麼這是以及如何解決它?

+0

你也可以[加載字符串作爲模塊](https://stackoverflow.com/questions/17581830/load-node-js-module-from-string-in-memory)與一點點的裝飾手前輸入。編輯:我假設節點,我意識到這是一個很大的假設。爲了以防萬一,請留下此評論。 – rlemon

回答

1

有人可以解釋爲什麼這是

因爲語法{ foo }的意思是「創建一個對象,給它一個叫foo屬性,給該屬性的foo變量的值。

如何解決它

解析數據。明確地點燃它。

首先分割:上的字符串。然後刪除空白。然後測試是第二個值是一個數字或關鍵字。等等。


如果您收到的數據是標準格式,這樣會更容易。然後你可以使用現有的解析器。如果您可以控制輸入:將其更改爲有效的JSON,然後使用JSON.parse

+0

一個(不可靠的)快捷方式可能是'JSON.parse('{'+ inputString +'}');' –

+0

@JaredSmith - 不起作用。 'on'不包含引號字符。 – Quentin

+0

好點。在這種情況下,我們將暴行因子調高至11:'eval('{'+ inputString +'}');'。特別是因爲OP是從其他地方得到它:) –

-1

你可以使用JSON.parse,但你需要喂他有效的JSON。 你需要有一個字符串形式:

{"on":true} 

(「{‘開’:真正}」)使用JSON.parse將返回所需的對象。

+1

以別人的評論和張貼作爲你自己的答案是一個以'plag'開始並以'arism'結尾的詞。 –

+0

當然,夥計,你是這個背後的天才。 – Coldblue