如何解析gulp-jade中的外部json?

时间:2015-07-24 15:56:44

标签: json gulp pug

我正在为我的模板系统使用jade模板,通过我的gulpfile.js将json文件作为jade locals传递,但我似乎无法深入了解json。我觉得我忽视了一些基本的东西,但无法在任何地方找到一个例子。

gulpfile.js:
将json文件传递给jade

gulp.task('html', function() {
    gulp.src('./markup/*.jade')
        .pipe(jade({
            pretty: true,
            locals: JSON.parse( fs.readFileSync('./markup/data/website_data.json', { encoding: 'utf8' }) )
        }).on('error', gutil.log))
        .pipe(gulp.dest('../'))
});

然后在我的玉中,为了便于阅读,我只是将locals传递给变量。

- var employees = locals

我可以遍历一级深度的json

玉:

for employee in employees
  if employee.Tier === 'Founder'
    li 
        button(data-bio="#{employee.LastName.toLowerCase()}") 
            img(src="/public/img/employees/#{employee.FirstName.toLowerCase()}-#{employee.LastName.toLowerCase()}.jpg", alt="#{employee.FirstName} #{employee.LastName} | #{employee.Title}")
            strong #{employee.FirstName} #{employee.LastName}
            | #{employee.Title}

JSON:

[
  {
    "FirstName":"John",
    "LastName":"Doe",
    "Title":"Strategist",
    "Tier":"Founder",
    "Description":"",
    "Email":"",
    "Links":""
  },
...
]

但是,如果我循环的项目在根目录中,那只对我有用,只要我将json更深一层,我就无法根据{{1}使其工作}。我想让json更深入,所以我可以在其中的不同部分而不仅仅是员工。

key

我尝试了几种不同的方法来挖掘json并且到目前为止都失败了。

ATTEMPT 1:调整变量调用并保持相同的循环

[{
    "employees": [
        {
            "FirstName":"Jason",
            "LastName":"Bellinger",
            "Title":"Lorem Ipsum",
            "Tier":"",
            "Description":"",
            "Email":"",
            "Links":""
        },
        ...
    ]
}]

我在运行- var employees = locals.employees

的终端中得到'无法读取未定义'的属性'长度'

还可以尝试:

$gulp watch

得到相同的结果。

尝试2:不要使用- var employees = locals['employees'] 并直接在我的循环中调用var

locals

for employee in locals.employees

我最终得到了同样的错误。

尝试3:

保留for employee in locals["employees"] 并调整循环

var

然后我在终端中没有收到错误,但我没有得到任何内容。它产生一个空 - var employees = locals ... for employee in employees li #{employee.LastName}

那么,我尝试在循环中深入了解:

li

for employee in employees[0]
        li #{employee.LastName}

我仍然没有错误,只有一个空for employee in employees['employees'] li #{employee.LastName}

我在我的日子里解析了足够li json似乎很简单,我必须忽略一些基本的东西。有人请谦卑我。

我还涉及jade,但是我用我的方法将数据输入gulp-data,所以我认为这是我jade中的方法......

2 个答案:

答案 0 :(得分:2)

您需要访问locals变量中的数组。 local = 1的长度,即整个员工阵列 您需要将employees =设置为locals变量内的数组:
    " - var employees = locals [0] .employees"

答案 1 :(得分:0)

我知道这是基本的东西。我将所有内容还原到原始设置并更改了var,这样就可以了。

- var employees = locals[0]['employees']

说实话,我以为我已经尝试了这个,但又回来再试一次......