2010-09-02 109 views
2

我有以下javascript,我需要使动态。帮助JSON结构

data.addRows(2); 
data.setValue(0, 0, 'name goes here'); 
data.setValue(0, 1, value 1 goes here); 
data.setValue(0, 2, value 2 goes here); 
data.setValue(1, 0, 'name goes here'); 
data.setValue(1, 1, value 1 goes here); 
data.setValue(1, 2, value 2 goes here); 

我想一个循环是前进的最好办法:我觉得这个结构需要改善

[ 
    {"User1":{"value1": 50.00,"value2": "100"}}, 
    {"User2":{"value1": 10.00,"value2": "20"}}, 
    {"User3":{"value1": 10.00,"value2": "20"}}, 
    {"User4":{"value1": 10.00,"value2": "20"}}, 
    {"User5":{"value1": 20.00,"value2": "40"}} 
] 

我想出了以下JSON结构。有人可以建议一个更好的结构,使我很容易提取我想从中提取的数据吗?

回答

4
var dataset = [ 
    {uid: 'user1', value1: 50.00, value2: 100}, 
    {uid: 'user2', value1: 10.00, value2: 20}, 
]; 

这样,你可以做data.length找出你有多少价值有,你可以循环更容易一点。

for(i = 0; i < dataset.length; i++) { 
    console.log(data[i].uid); 
} 

使用你的例子:例如

data.addRows(2); 
var l = dataset.length, i, x = 0, y = 0; 
for(i = 0; i < l; i++) { 
    data.setValue(y, x, dataset[i].uid); x++; 
    data.setValue(y, x, dataset[i].value1); x++; 
    data.setValue(y, x, dataset[i].value2); x=0; 
    y++; 
} 
+0

我已经对JSON结构进行了必要的修改,但似乎无法循环使用它来将它放到上面的javascript中。 – oshirowanen 2010-09-02 14:43:25

+1

我修改了我的答案,向您展示了一种可能的解决方案。这绝不是跟踪x和y的最佳方法,但它应该适合您需要的工作。 – 2010-09-02 14:47:56

+0

似乎到目前为止工作!现在测试它。谢谢 – oshirowanen 2010-09-02 14:56:37

2

我没有看到你可以使它变得更简单,除非对数据有特别的要求,允许重复的部分以某种方式分离出来。

+0

我之所以问这个问题,是因为我试图通过循环数据来使javascript动态变得很困难。 – oshirowanen 2010-09-02 14:33:06

+0

您遇到困难的原因是因为它看起来像您正在使用唯一密钥(user1,user2,user3)作为关联数据的关键字。通过创建uid并将其设置为user1,现在您可以通过单一方式引用任何用户。 – 2010-09-02 14:42:05

1

尝试类似:

{"users": [ 
    {"value1": 50, "value2": 100}, 
    {"value1": 10, "value2": 20}, 
    {"value1": 10, "value2": 20}, 
    {"value1": 10, "value2": 20}, 
    {"value1": 20, "value2": 40} 
]} 

或者,如果你希望你的用户的ID为:

{"users": { 
    "userId1": {"value1": 50, "value2": 100}, 
    "userId2": {"value1": 10, "value2": 20}, 
    "userId3": {"value1": 10, "value2": 20}, 
    "userId4": {"value1": 10, "value2": 20}, 
    "userId5": {"value1": 20, "value2": 40} 
}} 

记住,所有数字在JavaScript的浮点数。

+1

这个JSON不会很有帮助,因为你不能将值绑定到任何特定的用户。 – 2010-09-02 14:31:52

+0

每个值对都是针对特定用户的,我认为这不会起作用。 – oshirowanen 2010-09-02 14:33:51

+0

在第二个示例中,是否更容易循环以将数据粘贴到上面给出的JavaScript示例中? – oshirowanen 2010-09-02 14:36:08

0

我想你可以尝试这样的事情,这个想法是从ColdFusion的SerializeJson()

我假设你的数据就像一个表

user  value1  value2 
------------------------------------ 
user1  50   100 
user2  10   20 
... 

的JSON结构是

{"COLUMNS":["USER","VALUE1","VALUE2"],"DATA":[["user1",50.0,100.0],["user2",10.0,20.0]]} 

更清晰的阅读

{ 
    "COLUMNS": 
     [ 
      "USER", 
      "VALUE1", 
      "VALUE2" 
     ], 
    "DATA": 
     [ 
      [ 
       "user1", 
       50.0, 
       100.0 
      ], 
      [ 
       "user2", 
       10.0, 
       20.0 
      ] 
     ] 
} 

这种结构,我们知道,每varname.DATA [指数] [0]是指用户

0

检查此链接为json encoding

而且现在你的json值应该像这样编码

{"id":8,"heading":"heading goes here","content":"&lt;p&gt;content goes here&lt;\/p&gt;"} 

对不起,对不起你....