【问题标题】:Parsing JSON in node.js and displaying in jade在node.js中解析JSON并在jade中显示
【发布时间】:2016-12-11 16:45:32
【问题描述】:

我正在尝试解析 json 并以翡翠表格式显示响应。 在解析 json 并将键和值显示为两列时请求您的帮助。

Node.js

exports.postMQinput = function(req, res) {
  req.assert('name', 'Queue name field cannot be blank').notEmpty();
  var errors = req.validationErrors();

  if (errors) {
    req.flash('errors', errors);
    return res.redirect('/');
  }

  var options = {
    url: 'URL goes here',
    method: 'POST',
    headers: {
      'Content-Type': 'application/json'
    },
    body: JSON.stringify("my body input comes here")
  }

  request(options, function (error, response, body) {
    if (!error && response.statusCode == 200) {            
      res.render('Views/Details', {
        title: 'QUEUE',
        name: 'Welcome',
        result: body
      });
    } else {
      console.log(response.statusCode);
      req.flash('errors', { msg: 'Error during select. Retrying...' });
    }
  })
};

我的回复是这样的。

{
  "Response": {
    "data": {
      "length": 123,
      "status": "OPEN"
    }
  }
}

玉:

extends ../layout

block content
  .page-header
     h3 MESSAGE QUEUE DETAILS

    table
      thead
    tbody
     table.table.table-striped.table-bordered.table-hover.table-condensed
       tr
        th Value
        th Attribute


      each key, ind in result

        td= "LENGTH"
        td= key.length
        tr

我想要这样的桌子

长度 123

状态打开

【问题讨论】:

  • 您遇到了什么问题?
  • 我想以我无法做到的表格格式在翡翠中显示结果。
  • 所以你的问题是你不知道如何以表格格式显示结果?上面的结果是什么? key.length 输出什么
  • 你为什么要遍历结果。你试过result.data.lengthresult.data.status吗?
  • 正如你提到的,我试过不循环。我只是在表中得到空行。我上面代码的结果也是空的。

标签: javascript json node.js express pug


【解决方案1】:

身体从何而来?也许你应该在上面运行JSON.parse

res.render('Views/Details', {
        title: 'QUEUE',
        name: 'Welcome',
        result: JSON.parse(body)
});

【讨论】:

  • body 是响应的位置。我也试过 JSON.parse 。但是得到 [object object]
【解决方案2】:

您以错误的方式使用了从 Jade 模板构建 HTML 的迭代,我制作了这个示例来向您展示如何使用它,以防您得到一个值数组。

extends layout

block content
  .page-header
     h3 MESSAGE QUEUE DETAILS

     table.table.table-striped.table-bordered.table-hover.table-condensed
      thead
        tr
          th Value
          th Attribute
      tbody
        for res in result
          for obj in Object.keys(res)
            tr
              td= res[obj]
              td= obj

如果您在发送 JSON 的方式上遇到问题,请查看以下示例:

var express = require('express');
var path = require('path');
var http = require('http');
var bodyParser = require('body-parser');
var app = express();

// parse application/x-www-form-urlencoded
app.use(bodyParser.urlencoded({ extended: false }))

// parse application/json
app.use(bodyParser.json())

// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'jade');

app.get('/', function(req, res){
    return http.get({
        host: 'localhost',
        path: '/json'
    }, function(response) {
        // Continuously update stream with data
        var body = '';
        response.on('data', function(d) {
            body += d;
        });
        response.on('end', function() {
            // Data reception is done, do whatever with it!
            var parsed = JSON.parse(body);
            console.log(parsed);
            res.render("index", {result: parsed});
        });
    });

});

app.get('/json', function(req, res){
  var data = [ {
      "length": 123,
      "status": "OPEN"
    },{
    "length": 145,
      "status": "CLOSE"
    }
  ]

  res.json(data);

});

app.listen(80);

module.exports = app;

【讨论】:

  • 感谢详细的代码。我真的很感谢你在这方面的帮助。但是当我按照你建议的迭代方法时,我没有得到想要的输出。我将其作为 [object object] 数据以表格格式获取
  • 那应该是因为你得到的是对象而不是键,使用这个命令 Object.keys(res) 你从一个对象中获取所有键,所以在获取键之后,你可以轻松地从该对象获取值。 for obj in Object.keys(res) // 从你的对象中获取所有键 res[obj] // 假设 obj 是你想从你的对象中获取的键 res 放一些代码来帮助你更多!
猜你喜欢
  • 2017-02-26
  • 2016-08-28
  • 2019-10-15
  • 1970-01-01
  • 1970-01-01
  • 2015-10-03
  • 1970-01-01
  • 2013-02-15
  • 1970-01-01
相关资源
最近更新 更多