2017-08-25 47 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