javascript - 在没有json解析的jade中输出服务器生成的json对象

标签 javascript json node.js pug

我有一个不符合 JSON 标准的 JSON 对象,我无法更改对象的结构以使其符合 JSON 标准。

我需要在 Jade 模板中的 javascript block 中间渲染这个对象。该对象实际上是一个配置对象,它位于模板中的功能 block 中。

这里是对象。

{
  services: [],
  version: "1438276796258",
  country: "default",
  role: "User",
  Zack_Init: function () {

  },
  Zack_Global: function (event) {

  },
  Zack_PostRender: function () {

  }, 
  renderers: ['Renderer', 'NONE']
}

更新 这是我从 JS 文件中获取该对象的方法。

function readJSFile(url, filename, callback) {
  fs.readFile(url, "utf-8", function (err, data) {
    if (err) {
      callback(err);
      return;
    }
    try {
      callback(filename, data);
    } catch (exception) {
      callback(exception);
    }
  });
}

当 JSON.stringify 处理对象时,它会在转换过程中删除三个函数。

我正在添加一个 plunker 来显示当前解决方案的进度。输出以下内容。唯一剩下的就是删除格式化字符。

{"services":[],"version":"1438276796258","country":"default","role":"User","Zack_Init":function () {\n\n },"Zack_Global":function (event) {\n\n },"Zack_PostRender":function () {\n\n },"renderers":["Renderer","NONE"]}

function convertToString(obj) {
  return JSON.stringify(obj, function(k, v) {
    return (typeof v === 'function' ? ['@@beginFunction@@', v.toString(), '@@endFunction@@'].join('') : v);
  }).replace(/"@@beginFunction@@|@@endFunction@@"/g, '');
}

obj = {
  services: [],
  version: "1438276796258",
  country: "default",
  role: "User",
  Zack_Init: function() {

  },
  Zack_Global: function(event) {

  },
  Zack_PostRender: function() {

  },
  renderers: ['Renderer', 'NONE']
};

$('#test').text(convertToString(obj));
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="test"></div>

最佳答案

如果我正确理解了您的请求(您希望获取从外部加载的文件的内容,然后将其加载到 <script> block 中),我认为到目前为止已探索的解决方案已基本结束- 设计。

这是我所拥有的:

// index.js
var express = require('express');
var router = express.Router();
var fs = require('fs');

router.get('/', function(req, res, next) {
  readJSFile('./whacky_obj.js', 'whacky_json_obj.js', render); // used .js because OP implies that as the file source in the extraction method
  function render(fname, obj) {
    res.render('index', { jsObj: obj });
  }
});

// OP's readJSFile method
function readJSFile(url, filename, callback) {
  fs.readFile(url, "utf-8", function (err, data) {
    if (err) {
      callback(err);
      return;
    }
    try {
      callback(filename, data);
    } catch (exception) {
      callback(exception);
    }
  });
}

module.exports = router;

然后在你的 Jade 文件中:

block content
  h1= title
  script!= jsObj

您可以看到 jsObj 的输出交换 script 时的变量对于 pre , 但是 script会按照你的要求去做。

关于javascript - 在没有json解析的jade中输出服务器生成的json对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32021147/

相关文章:

node.js - 错误 : Cannot find module 'C:\Users\senyo\AppData\Roaming\npm\node_modules\expo-cli\bin\expo.js'

javascript - Ajax 请求 : Refused to set unsafe header

javascript - 我的导航栏正在下载文件,但只在 github 上

javascript - 是否可以使用 native javascript将mysql数据库转换为Json?

javascript - 将ajax数据放入html并显示在页面上的最佳方法

python - 使用 Python 从 json API 响应中提取属性

c++ - 如何清理在 Local<External> 引用中跟踪的 C++ 对象?

javascript - nodejs在回调函数中绑定(bind)对象

javascript - 如何将 JavaScript 代码嵌入到 Google 协作平台页面中?

javascript - 如何使用 javascript、ajax 和 php 从目录加载图像