2017-08-25 44 views
0

所以我有一個腳本可以生成4個變量:NAME,SMA,BBLOWER和BBUPPER以及循環的每次迭代,並將它們作爲新行添加到現有數組中。所以我的數組形式手動JSON字符串創建

[[NAME,SMA,BBLOWER,BBUPPER],[NAME,SMA,BBLOWER,BBUPPER],[NAME, SMA,BBLOWER,BBUPPER],etc] 

的什麼我想要做的是,而不是將它們添加到一個數組,我想將它們變成一個JSON文件具有特定結構:

{ 
    "NAME" : [{ 
      "SMA" : <value>, 
      "BBLOWER" : <value>, 
      "BBUPPER" : <value>, 
     }], 
    "NAME" : [{ 
      "SMA" : <value>, 
      "BBLOWER" : <value>, 
      "BBUPPER" : <value>, 
     }], etc 
    ] 
} 

現在我已經輸入了,我甚至不知道正確的結構。不管怎麼說,我基本上是想通過簡單地輸入一些希望能夠採取最終JSON文件,輕鬆地提取SMA值(例如,並使用名爲「VGS」):

smaValue = json.VGS.SMA 

或市場的BBUPPER「 VAS「是這樣的:

bbUpperValuer = json.VAS.BBUPPER 

這種方法更實用嗎?還有其他一些方法可以使用數組來做同樣的事情,但以JSON方式來做,看起來更乾淨和「適當」。

+0

你問如何將你的數組轉換爲JSON? – larz

回答

0

JSON是要走的路。我猜測這就是mongoDB在其數據結構中存儲數據時使用JSON的原因。

你可以做

{ 
    "VGS" : { 
      "SMA" : <value>, 
      "BBLOWER" : <value>, 
      "BBUPPER" : <value>, 
     }, 
    "VAS" : { 
      "SMA" : <value>, 
      "BBLOWER" : <value>, 
      "BBUPPER" : <value>, 
     }, etc 
} 

叫他們這樣

smaValue = json["VGS"]["SMA"]; 
bbUpperValuer = json["VAS"]["BBUPPER"]; 
1

可以很容易地得到一個JavaScript之間的混淆對象常量(在實際的JavaScript對象的源代碼的定義), JavaScript對象本身和JSON(一種將數據表示爲字符串的格式,受JavaScript語法的啓發)。

我提到這一點,因爲你的問題似乎觸及到幾個不同的目的:

  • 改變一個變量的結構從平面陣列更加多維對象
  • 存儲的對象,而不管結構化爲文件,序列化爲JSON字符串,然後再讀回並重新創建對象訪問多維對象的屬性,無論是通過正常的JavaScript操作創建還是通過解析JSON字符串來訪問

對於第一部分,您只需要更改腳本從寫入數組到設置對象屬性的工作方式。您不需要預先聲明結構。沒有看到你的代碼,很難更具體,但它可能會結合直接財產訪問固定字段名稱,如item.UPPER = foo();動態訪問屬性不知道像results[getName()] = item;

第二部分很容易 - 但也可能與當前的任務無關。只需使用dataToStore = JSON.stringify(something)即可將對象轉換爲JSON格式的字符串,然後使用something = JSON.parse(dataLoadedFromStore)將其轉回。

您自己回答的第三部分 - 您給出的示例語法正是您可以對第一步創建的對象執行的操作。再次強調一點,它與JSON完全沒有關係,它只是如何訪問JavaScript中的對象。

+0

好聖球謝謝你的詳細解釋!我認爲我是我需要的大部分途徑。在定義了上面的變量之後,我簡單地添加了一行'bollingerData [i] = {Market:name,SMA:SMA,BBTOP:bbTop,BBBOTTOM:bbBottom};'這給了我一些非常接近我之後的東西:'[市場:'VAS',SMA:29019.44,BBTOP:29019.44,BBBOTTOM:29019.44}]'現在的技巧是修改它,使它成爲'{'VAS':[{「SMA」:,「BBLOWER」:, BBUPPER「:}]}' – Mattaus

+0

@Mattaus我不確定你爲什麼想要那裏的單元素數組,但是使用這個名稱作爲關鍵就像初始化初始化空對象那樣簡單''bollingerData = { }'然後寫'bollingerData [name]'而不是'bollingerData [i]'。 – IMSoP

+0

感謝您的提示。在我的腦海中,它會讓數據更容易處理,而不是通過數組搜索所需的名稱,我可以直接解決它。我不確定它會按照我設想的方式運行,但只有一種方法可以看到:) – Mattaus