-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathjsonviewer.js
115 lines (114 loc) · 4.28 KB
/
jsonviewer.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
// MIT License - 2023 Neknaj - Bem130
// https://github.com/neknaj/jsonviewer
function showJSON(obj,elm,defaultopen=false,hidekey=[]) {
elm.classList.add("jsonviewer");
elm.innerHTML = "";
elm.appendChild(json_child(obj,defaultopen,hidekey));
}
function json_child(obj,defaultopen=false,hidekey=[]) {
if (obj instanceof Array) {
let details = document.createElement("details");
details.classList.add("array");
details.open = defaultopen;
let summary = document.createElement("summary");
{
let type = document.createElement("span");
let length = document.createElement("span");
let content = document.createElement("span");
type.innerText = "Array";
length.innerHTML = `(${obj.length})`;
content.innerText = JSON.stringify(obj);
content.classList.add("summary_content")
summary.appendChild(type);
summary.appendChild(length);
summary.appendChild(content);
}
details.appendChild(summary);
for (let i in obj) {
let elm = obj[i];
let index = document.createElement("span");
let colon = document.createElement("span");
let comma = document.createElement("span");
let br = document.createElement("br");
comma.classList.add("comma");
index.classList.add("array_index");
index.innerText = i;
colon.innerText = ":";
comma.innerText = ",";
details.appendChild(index);
details.appendChild(colon);
details.appendChild(json_child(elm,defaultopen,hidekey));
details.appendChild(comma);
details.appendChild(br);
}
return details;
}
else if (obj instanceof Object) {
let details = document.createElement("details");
let summary = document.createElement("summary");
{
let type = document.createElement("span");
type.innerText = "Object";
let content = document.createElement("span");
content.classList.add("summary_content")
content.innerText = JSON.stringify(obj);
summary.appendChild(type);
summary.appendChild(content);
}
details.open = defaultopen;
details.classList.add("object");
details.appendChild(summary);
for (let elm in obj) {
if (hidekey.includes(elm)) {continue}
let p = document.createElement("p");
let addelm = json_child(elm,defaultopen,hidekey);
let colon = document.createElement("span");
let comma = document.createElement("span");
addelm.classList.add("object_key");
comma.classList.add("comma");
colon.innerText = ":";
comma.innerText = ",";
p.appendChild(addelm);
p.appendChild(colon);
p.appendChild(json_child(obj[elm],defaultopen,hidekey));
p.appendChild(comma);
details.appendChild(p);
}
return details;
}
else {
if (typeof obj === "string") {
let span = document.createElement("span");
let span1 = document.createElement("span");
let span2 = document.createElement("span");
let span3 = document.createElement("span");
span.classList.add("string");
span1.innerText = "\"";
span3.innerText = "\"";
span2.innerText = obj.toString();
span.appendChild(span1);
span.appendChild(span2);
span.appendChild(span3);
return span;
}
else if (typeof obj === "number") {
let span = document.createElement("span");
span.classList.add("number");
span.innerText = obj.toString();
return span;
}
else if (typeof obj === "boolean") {
let span = document.createElement("span");
span.classList.add("boolean");
span.innerText = obj.toString();
return span;
}
else {
let span = document.createElement("span");
if (obj!=null) {
span.innerText = obj.toString();
}
return span;
}
}
}