2016-02-18 46 views
0

我不明白爲什麼這不起作用。有時我可以從json文件中獲取第一個對象,並且只要我想要一個嵌套對象就無法獲取它。呈現索引中的json數據

我該如何渲染「album_cover」文本?

我使用express js。

我在路由文件夾index.js

var express = require('express'); 

var router = express.Router(); 

var fs = require('fs'); 



/* GET home page. */ 

router.get('/', function(req, res, next) { 

var file = __dirname + '/../public/list/list.json'; 


fs.readFile(file, 'utf8', function (err, data) { 

if (err) { 

    console.log('Error: ' + err); 

    return; 

} 


data = JSON.parse(data); 

console.log(data); 

res.render('index', { title: data }); 

}); 

}); 


module.exports = router; 

,這裏是我的JSON文件。

{ 
    "Year": { 
    "2011": { 
     "top40": { 
     "id": { 
      "01": { 
      "album_cover": "http://o.scdn.co/image/830a22646bc38f72df95ec98e3ab6bb19aa6074b", 
     "artist namn": "Adele", 
     "song": "Rolling In The Deep", 
     "spotify": "http://open.spotify.com/track/7h8Ud480Fm4ReUVxgFF9ZX", 
     "youtube": "http://youtu.be/rYEDA3JcQqw" 
     }, 
     "02": { 
     "album_cover": "http://o.scdn.co/image/215c999786e8319a09b7af87a970c2bdb6747c92", 
     "artist namn": "LMFAO", 
     "song": "Party Rock Anthem", 
     "spotify": "http://open.spotify.com/track/1CNJyTUh56oj3OCZOZ5way", 
     "youtube": "http://youtu.be/KQ6zr6kCPj8" 
     } 
    } 
    } 
} 
    } 
} 

,這裏是我的索引視圖文件

<!DOCTYPE html> 
<html> 
    <head> 
    <title><%= title %></title> 
    <link rel='stylesheet' href='/stylesheets/style.css' /> 
    </head> 
    <body> 

<h1>Top Hits year : :<%= title %></h1> 
<h2>Adele<%= title %></h2> 
<p>Rolling In The Deep <%= title %></p> 
    <a href="http://open.spotify.com/track/7h8Ud480Fm4ReUVxgFF9ZX " target="_blank"><img src="/images/spotify.jpg"></a> 
<a href="http://youtu.be/rYEDA3JcQqw" target="_blank"><img src="/images/youtube.png"></a> 
    </body> 
    </html> 

回答

0

當我轉換你的對象,它給了我一個錯誤,因爲它是一個數字,在"2011"

console.log(data.Year.2011); 

我改變你的JSON像

{ 
    "Year": { 
    "top2011": { 
     "top40": { 
     "id": { 
      "top01": { 
      "album_cover": "http://o.scdn.co/image/830a22646bc38f72df95ec98e3ab6bb19aa6074b", 
     "artist namn": "Adele", 
     "song": "Rolling In The Deep", 
     "spotify": "http://open.spotify.com/track/7h8Ud480Fm4ReUVxgFF9ZX", 
     "youtube": "http://youtu.be/rYEDA3JcQqw" 
     }, 
     "top02": { 
     "album_cover": "http://o.scdn.co/image/215c999786e8319a09b7af87a970c2bdb6747c92", 
     "artist namn": "LMFAO", 
     "song": "Party Rock Anthem", 
     "spotify": "http://open.spotify.com/track/1CNJyTUh56oj3OCZOZ5way", 
     "youtube": "http://youtu.be/KQ6zr6kCPj8" 
     } 
    } 
    } 
    } 
    } 
} 

在此之後,我能夠使用它

console.log(data.Year.top2011.top40.id.top01.album_cover); 

或不改變你的JSON,你可以像使用

data.Year['2011']['top40']['id']['01']['album_cover']); 

or 

data.Year['2011'].top40.id['01'].album_cover 
+0

Okej,這工作,所以在json文件我不能使用數字作爲第一個字符呢? –

+0

謝謝你SamiMalik –

+0

更好,如果你開始你的密鑰與字符,否則 簡單的方法就像 data ['Year'] ['2011'] ['top40'] ['id'] ['01'] ['album_cover' ]); – SamiMalik

0

渲染方法必須是這個樣子,如果你要訪問的第一album_cover場:

res.render('index', { title: data.Year.2011.top40.id.01.album_cover }); 
+0

耶,我試過了,但那不起作用=/ –

+0

試試like(data.Year ['2011'])); – SamiMalik

+0

也工作,謝謝 –