2016-02-18 36 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

也工作,谢谢 –