我有一个不符合 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/