2014-02-24 64 views
-2

我想创建一个嵌套的JSON-对象结构如下:JS - 创建动态JSON对象

[{ 
    "date" : "2011", 
    "imgs" : [ 
     {"path" : "img1.jpg"}, 
     {"path" : "img2.jpg"}, 
     {"path" : "img3.jpg"} 
     ] 
    },{ 
    "date" : "2012", 
    "imgs" : [ 
     {"path" : "img4.jpg"}, 
     {"path" : "img5.jpg"}, 
     {"path" : "img6.jpg"} 
    ] 
}] 

等等...

我有一个JSON对象与路径的图像和时间戳。 2011年图片的所有路径应保存在嵌套2011对象中。所有从2012年的照片在2012年

但我不知道我怎么可以创建IMGS结构...

+0

看起来你已经创建了JSON。你从哪里转换数据? – zzzzBov

+1

无法分辨您需要什么或卡在哪里。 –

+0

可能重复:[重新构造JSON](http://stackoverflow.com/questions/21034128/re-structuring-a-json/21035282#21035282)。 – Beterraba

回答

0

jsFiddle Demo

要重新创建确切例如,你可以喜欢它的代码这样的:

var json = []; 
var imgCount = 1; 
var date = 2011; 
var imageSets = 2; 
for(var i = 0; i < imageSets; i++){ 
json.push({ "date":date++, 
    "imgs":(function(){ 
    var set = []; 
    for(var n = 0; n < 3; n++){ 
    set.push({"path":"img"+(imgCount++)+".jpg"}); 
    } 
    return set;})() 
); 
} 

如果你需要一个更动态路径,那么你可以在阵列中的图像,而是使用imgCount作为一个确切的数字,你可以引用数组中存储的url。同样可以用date来代替date ++,它是对数据数组的引用,其中索引是这里所看到的日期变量。

如果情况变得更加复杂,您可以始终使用这个结构。

0

我认为这将是更好的这种方式组织数据:

var year2011 = { 
    "path1": "img1.jpg", 
    "path2": "img2.jpg", 
    "path3": "img3.jpg" 
} 
var year2012 = { 
    "path1": "img4.jpg", 
    "path2": "img5.jpg", 
    "path3": "img6.jpg" 
} 

这是简单得多。 你可以写一个构造这样的对象:

var Year = function (path1, path2, path3) { 
    this[0] = path1; 
    this[1] = path2; 
    this[2] = path3; 
} 

然后调用它传递要添加作为参数的路径:

var year2013 = new Year("img7.jpg", "img8.jpg", "img9.jpg"); 

而这会导致这样的:

year2013 = { 
    "path1": "img7.jpg", 
    "path2": "img8.jpg", 
    "path3": "img9.jpg" 
} 

而且你也可以组织这样的路径:

var year2011 = ["img1.jpg","img2.jpg","img3.jpg"], 
    year2012 = ["img4.jpg","img5.jpg","img6.jpg"] 

注意: 我已经写了“年”之前的年份,因为如果你只写一个变量的数字,它会导致一个错误。