使用 handlebars.js 显示 JSON 数据
Display JSON data using handlebars.js
我需要弄清楚如何将完整的 JSON 响应打印到我的页面上(甚至部分),但我似乎无法弄清楚。稍后我将最终用更多上下文填写页面。
JS文件:
app.get('/', function(req, res) {
var context
apiLib.fetch('acct:chars', function(err, result){
if(err) throw err
context = result;
console.log(result);
res.render('/', context);
});
});
车把:
{{#each context.characters}}
{{this.name}}
{{/each}}
JSON数据:
{
"result": {
'1234':{ //this is the character ID
"characters": {
"name": 'Daniel',
"CharacterID": '1234'
etc...
}
}
}
我的页面未打印任何内容,但控制台记录了所有内容。我正在使用 express.js 来处理路由。
由于您要遍历车把中的对象,因此应该按照 -
{{#each context.characters}}
{{#each this}}
{{@key}} - {{this}}
{{/each}}
{{/each}}
一个问题是 each
助手,这里是:{{#each context.characters}}
。 each
所做的是在当前上下文 中查找 变量。当您调用 res.render('/', context)
时,您已经将 context
对象传递给 Handlebars。因此,现在 Handlebars 正在 context
对象中查找名为 context
的属性,但它不会找到它。因此,您应该将该行代码更改为 {{#each characters}}
.
同样的事情也适用于你写 {{this.name}}
的地方。我认为如果您解决了其他问题,这实际上会起作用,但是 this
是不必要的,因为 Handlebars 会自动查看 this
(当前上下文)。所以 {{name}}
应该没问题。
最后,如果您真的只是想将 JSON 文件显示为纯文本页面,则不需要通过 Handlebars 模板 运行 它。您可以只使用 res.json(context)
。这将 return 一个 JSON 响应。如果您的服务器配置为处理 application/json
MIME 类型,它应该在浏览器中呈现为纯文本。
如果你想显示字符串化的JSON,你可以使用一个助手
JS
Handlebars.registerHelper('toJSON', function(obj) {
return JSON.stringify(obj, null, 3);
});
HTML
<pre>{{toJSON result}}</pre>
如果您将它与 Node.js 和 mongoDB 一起使用,这个答案适合您;
假设您从名为 data
的数据库中得到以下响应:
{
_id: "5AAAAAAAAAe04fc1a1", //some id idk
BUSINESS: 'FLEX TAPE',
SHOWMAN: 'PHIL SWIFT',
CONTACT: 'PHIL SWIFT',
PHONE: '11111111113',
ETC: 'yes',
}
您可能希望显示字段的目的是利用客户端呈现。例如,将 data
与经典的 JSON.stringify(data)
作为 okData
进行管道传输......然后您可以使用 {{}}
表示法引用它。
例如:
<p id="some-id" style="display: none"> {{okData}} </p>
<script>
let jsonStrLookup = document.getElementById('some-id').innerHTML
let js = JSON.parse(jsonStrLookup)
console.log(js)
</script>
这适用于 SIMPLE 应用程序,希望它能有所帮助,如果有什么不对的地方,我总是会在这里查看,并会尽力帮助您。
我需要弄清楚如何将完整的 JSON 响应打印到我的页面上(甚至部分),但我似乎无法弄清楚。稍后我将最终用更多上下文填写页面。
JS文件:
app.get('/', function(req, res) {
var context
apiLib.fetch('acct:chars', function(err, result){
if(err) throw err
context = result;
console.log(result);
res.render('/', context);
});
});
车把:
{{#each context.characters}}
{{this.name}}
{{/each}}
JSON数据:
{
"result": {
'1234':{ //this is the character ID
"characters": {
"name": 'Daniel',
"CharacterID": '1234'
etc...
}
}
}
我的页面未打印任何内容,但控制台记录了所有内容。我正在使用 express.js 来处理路由。
由于您要遍历车把中的对象,因此应该按照 -
{{#each context.characters}}
{{#each this}}
{{@key}} - {{this}}
{{/each}}
{{/each}}
一个问题是 each
助手,这里是:{{#each context.characters}}
。 each
所做的是在当前上下文 中查找 变量。当您调用 res.render('/', context)
时,您已经将 context
对象传递给 Handlebars。因此,现在 Handlebars 正在 context
对象中查找名为 context
的属性,但它不会找到它。因此,您应该将该行代码更改为 {{#each characters}}
.
同样的事情也适用于你写 {{this.name}}
的地方。我认为如果您解决了其他问题,这实际上会起作用,但是 this
是不必要的,因为 Handlebars 会自动查看 this
(当前上下文)。所以 {{name}}
应该没问题。
最后,如果您真的只是想将 JSON 文件显示为纯文本页面,则不需要通过 Handlebars 模板 运行 它。您可以只使用 res.json(context)
。这将 return 一个 JSON 响应。如果您的服务器配置为处理 application/json
MIME 类型,它应该在浏览器中呈现为纯文本。
如果你想显示字符串化的JSON,你可以使用一个助手
JS
Handlebars.registerHelper('toJSON', function(obj) {
return JSON.stringify(obj, null, 3);
});
HTML
<pre>{{toJSON result}}</pre>
如果您将它与 Node.js 和 mongoDB 一起使用,这个答案适合您;
假设您从名为 data
的数据库中得到以下响应:
{
_id: "5AAAAAAAAAe04fc1a1", //some id idk
BUSINESS: 'FLEX TAPE',
SHOWMAN: 'PHIL SWIFT',
CONTACT: 'PHIL SWIFT',
PHONE: '11111111113',
ETC: 'yes',
}
您可能希望显示字段的目的是利用客户端呈现。例如,将 data
与经典的 JSON.stringify(data)
作为 okData
进行管道传输......然后您可以使用 {{}}
表示法引用它。
例如:
<p id="some-id" style="display: none"> {{okData}} </p>
<script>
let jsonStrLookup = document.getElementById('some-id').innerHTML
let js = JSON.parse(jsonStrLookup)
console.log(js)
</script>
这适用于 SIMPLE 应用程序,希望它能有所帮助,如果有什么不对的地方,我总是会在这里查看,并会尽力帮助您。