2013-05-14 71 views
0

我有这个代码存储数组中的数据。但我想要json格式的输出。 目前,我可以将输入数据转换为json,但我不确定如何更改此对象的代码。 例如在线路代码:如何以json格式编写此代码?

target = (children[p] || (children[p] = [])); 

target.push({value:item}); 

任何想法?

for (var i = 0, len = arry.length; i < len; ++i) { 
    var item = arry[i], 
     p = item.Parent, 
     target = []; 

    if(p == rootId) { 
     target = roots; 
    } 
    else {    
     target = (children[p] || (children[p] = []));   
    } 

    target.push({ value: item }); 

}

+1

假设你想要的东西是真实的ly [JSON](http://json.org/)(我不确定),那么你应该使用JSON.stringify。 – 2013-05-14 16:34:02

+0

JSON是一种格式化协议,而不是数据结构...您是否问如何将其序列化为JSON? – 2013-05-14 16:34:30

+0

“与JSON一起工作”令人难以置信地模糊。你想解决什么问题? – SLaks 2013-05-14 16:35:02

回答

2

你可以通过调用JSON.stringify()序列的任意JavaScript对象到JSON字符串。

这可能是也可能不是你想要的。

+1

这不就是我们所说的代表嫖娼吗? – 2013-05-14 16:37:40

+0

我的问题是目标是数组和目标上的代码=(children [p] ||(children [p] = []));和target.push({value:item});适用于数组,但不适用于对象。 – user2335149 2013-05-14 16:38:13

+0

@FlorianMargaine:不;我很久以前就达到了限制。这是我回答问题的方式,同时明确表示问题是错误的。 – SLaks 2013-05-14 18:13:37

0

如果你想通过迭代一个JS对象,而不是一个数组,使相同的代码工作,那么你可能想这一点:

for (var key in obj) { 
    var item = obj[key]; 
     p = item.Parent, 
     target = []; 

    if(p == rootId) { 
     target = roots; 
    } 
    else {    
     target = (children[p] || (children[p] = []));   
    } 

    target.push({ value: item }); 
} 

如果你想从一个数组开始,但填写一个对象,那么也许你想这样的:

for (var i = 0, len = arry.length; i < len; ++i) { 
    var item = arry[i], 
     p = item.Parent, 
     target = []; 

    if(p == rootId) { 
     target = roots; 
    } 
    else {    
     target = (children[p] || (children[p] = {}));   
    } 
    target.value = item; 
} 

我建议你阅读对象和属性的好MDN介绍:Working with objects