2012-08-17 107 views
1

我是json的新手,我真的很困扰我的数据格式。
它需要具有格式:music.genre.album,但只是genre.album也可以。

请有人可以帮助以下结构?我将使用getJSON来遍历它。如何格式json数据

{"music": [{ 

"Genre_Blues": [{ 
    "Album": "224", 
    "Path": "images/library/", 
    "FileName": "AlbumCover224.png" 
    }, 
    { 
    "Album": "277", 
    "Path": "images/library/", 
    "FileName": "AlbumCover277.png" 
    }, 
    { 
    "Album": "885", 
    "Path": "images/library/", 
    "FileName": "AlbumCover885.png" 
    }], 
"Genre_Jazz": [{ 
    "Album": "442", 
    "Path": "images/library/", 
    "FileName": "AlbumCover442.png" 
    }, 
    { 
    "Album": "467", 
    "Path": "images/library/", 
    "FileName": "AlbumCover467.png" 
    }, 
    { 
    "Album": "724", 
    "Path": "images/library/", 
    "FileName": "AlbumCover724.png" 
    }], 
"Genre_Rock": [{ 
    "Album": "022", 
    "Path": "images/library/", 
    "FileName": "AlbumCover022.png" 
    }, 
    { 
    "Album": "609", 
    "Path": "images/library/", 
    "FileName": "AlbumCover609.png" 
    }, 
    { 
    "Album": "067", 
    "Path": "images/library/", 
    "FileName": "AlbumCover067.png" 
    }] 
    }] 

} 

回答

1

JSON就像JavaScript(因为它是)。

如果你想存储多种类型的内容(哪些类型是...),那么它需要是一个数组。

但考虑一下常规的JS对象和数组。

music = {}; 
music.genre = {}; 
music.genre.blues = []; 
music.genre.blues[0] = {}; 

可以这样写:

json = { 
    music : { 
     genre : { 
      blues : [], 
      rock : [], 
      soul : [] 
     } 
    } 
} 

那么你已经有了:

json.music.genre.blues[0].album_title; // "Some Kind of Blue" 
json.music.genre.blues[0].album_artist; // "Miles Davis" 

您可以设置一个循环要经过你的蓝调,或你的摇滚或任何..

如果你不想循环它们,那么你必须找到其他的方式来索引它们,因为你不能有一个对象t有8个“专辑”属性。 也许你可以在那时按标题列出......但这并不是那么有帮助。在这一点上,你只是摆脱了阵容。

你也可以设置它,以便流派是一个数组(这是你现在拥有的)。

所以,你可能有:

music = { 
    genre : [ 
     { 
      name : "Blues", 
      albums : [ 
       { 
        title : "Some Kind of Blue", 
        artist : "Miles Davis" 
       } 
      ] 
     }, { 
      name : "Soul", 
      albums : [ 
       { 
        title : "Innervisions", 
        artist : "Stevie Wonder" 
       }, { 
        title : "Talking Book", 
        artist : "Stevie Wonder" 
       } 
      ] 
     } 
    ] 
}; 

那么你已经有了:

music.genre[0].name;    // "Blues" 
music.genre[1].albums[0].artist; // "Stevie Wonder" 

这样做的好处是说:

music.genre.forEach(function (genre) { console.log(genre.name); }); // "Blues", "Soul" 

music.genre.forEach(function (genre) { 
    console.log("---" + genre.name + "---"); 
    genre.albums.forEach(function (album) { 
     console.log("Title: " + album.title); 
     console.log("Artist: " + album.artist); 
    }); 
}); 

这一切都归结到什么你想用它做。 只要你知道那是什么,你就可以自由地做任何你想做的事情。

+0

非常感谢,这真的帮助了我。感谢您的时间。 – gjok 2012-08-17 16:15:05

0

几乎那里。所有你需要做的是取出[]