【发布时间】:2018-01-03 19:43:32
【问题描述】:
index.html
- 如何在html页面上打印复杂的json对象?
- 它应该看起来像一个带有适当缩进的 json 对象
- 我应该只能更改 json KEY 并将其保存回来。
注意:我不能使用 json.stringify,因为我想要一种 JOSN 编辑器,我应该只更改键而不是值并将其保存回来。
p{ padding: 0; margin: 0; } .indentLeft20{padding-left: 20px;} .indentLeft40{padding-left: 40px;} .indentLeft60{padding-left: 60px;} .indentLeft80{padding-left: 80px;} .indentLeft100{padding-left: 100px;} <div id="root"></div>
javascript
export default function editorGenerator() {
const root = document.getElementById('root');
var data = {
"prodname": "My product",
"type": "medium",
"color": "red",
num: [1,2,3],
"area": {
"height": 2,
"width": 3,
"length": 4
},
"feature": {
"featureArray": [{
"title": "title1",
"available": true
},
{
"title": "title2'",
"available": true
},
{
"title": "title3",
"available": false
}
]
}
};
editor( data );
}
var indent = 20; //to add padding for indentation
var myeditor = document.createElement("DIV");
let editor = function self(obj, editor){
for(var key in obj){
if(typeof obj[key] === 'object' && !Array.isArray(obj[key])){
var line = document.createElement("DIV");
var txtdata = document.createElement("H6");
var textnode = document.createTextNode(key+"(Object)");
txtdata.appendChild(textnode);
line.appendChild(txtdata);
myeditor.appendChild(line);
var att = document.createAttribute("class");
att.value = "indentLeft"+indent;
line.setAttributeNode(att);
indent = indent+20;
self( obj[key]);
}
if(Array.isArray(obj[key])){
indent = indent+20;
var line = document.createElement("DIV");
var txtdata = document.createElement("H6");
var textnode = document.createTextNode(key+"(Array)");
txtdata.appendChild(textnode);
line.appendChild(txtdata);
myeditor.appendChild(line);
var att = document.createAttribute("class");
att.value = "indentLeft"+indent;
line.setAttributeNode(att);
obj[key].forEach( (item)=>{
if(typeof item !== 'object'){
var line = document.createElement("DIV");
var txtdata = document.createElement("p");
var textnode = document.createTextNode(item);
txtdata.appendChild(textnode);
line.appendChild(txtdata);
myeditor.appendChild(line);
}
})
}
if(typeof obj[key] === 'string' || typeof obj[key] === 'number' || typeof obj[key] === 'boolean'){
var line = document.createElement("DIV");
var txtdata = document.createElement("P");
console.log(key+' :: '+obj[key] );
var textnode = document.createTextNode(obj[key]);
txtdata.appendChild(textnode);
line.appendChild(txtdata);
myeditor.appendChild(line);
var att = document.createAttribute("class");
att.value = "indentLeft"+indent;
line.setAttributeNode(att);
}
if( Array.isArray(obj[key]) ){
obj[key].forEach(item => {
self( item );
});
}
}
}
root.appendChild(myeditor);
我必须在 HTML 页面上打印嵌套的 JSON 对象。 JSON 对象格式总是不同,它不是固定的。它可以是非常复杂的对象。我必须用正确的缩进打印它。此外,我必须将对象和数组包装在括号内,使其看起来像页面上的对象。我必须使用 DIV 或 UL > LI 标签组合。
【问题讨论】:
-
看看这个答案是否有帮助:stackoverflow.com/questions/4810841/…
标签: javascript html css javascript-objects