zma*_*anc 9 javascript json node.js pug
我有一个不符合JSON标准的JSON对象,我无法更改对象的结构以使其符合JSON标准.
我需要在Jade模板中的javascript块中间渲染此对象.该对象实际上是一个配置对象,它位于模板的功能块中.
这是对象.
{
services: [],
version: "1438276796258",
country: "default",
role: "User",
Zack_Init: function () {
},
Zack_Global: function (event) {
},
Zack_PostRender: function () {
},
renderers: ['Renderer', 'NONE']
}
Run Code Online (Sandbox Code Playgroud)
更新 以下是我从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);
}
});
}
Run Code Online (Sandbox Code Playgroud)
当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"]}
Run Code Online (Sandbox Code Playgroud)
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));Run Code Online (Sandbox Code Playgroud)
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="test"></div>Run Code Online (Sandbox Code Playgroud)
为了安全地删除换行符,应首先删除“注释”:
function convertToString(obj) {
return JSON.stringify(obj, function(k, v) {
return (
typeof v !== 'function' ?
v :
v.toString().replace(/\/\/.*?$/mg, '') // removes single line comments
.replace(/\/\*[\s\S]*?\*\//g, '') // removes multi-line comments
.replace(/[\r\n]/g, '') // removes new line
);
}, 2).replace(/"(function.+)",?$/gm, '$1'); // removes quotes around functions
}
obj = {
services: [],
version: "1438276796258",
country: "default",
role: "User",
Zack_Init: function() {
// comment
var a = 1;// comment //
if(a === /*comment */ 3) {//comment
/* comment
comment*/
}
/*end*/
},
Zack_Global: function(event) {
},
Zack_PostRender: function() {
},
renderers: ['Renderer', 'NONE']
};
$('#result').text(convertToString(obj));Run Code Online (Sandbox Code Playgroud)
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<pre id="result"></pre>Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
849 次 |
| 最近记录: |