1
- /**
2
- * 传入 JSON 字符串,并初始化指针,解析 JSON 对象
3
- * @param {[string] } jsonString [传入的 JSON 字符串]
4
- * @return {[object] } [解析后的 JOSN 对象]
5
- */
6
- parseJson : function ( jsonString ) {
1
+ var parseBtn = document . querySelector ( '#btn' )
2
+ var pText = document . querySelector ( 'p' )
3
+
4
+ parseBtn . addEventListener ( 'click' , function ( ) {
5
+ var JsonString = document . querySelector ( '#JSON_area' ) . value
6
+ pText . innerHTML = "解析结果已在控制台输出!"
7
+ console . log ( jsonpars ( JsonString ) )
8
+ } )
9
+
10
+
11
+ function jsonpars ( jsonString ) {
7
12
var theJson = '' ,
8
13
index = 0 ,
9
14
onOff = false
10
- /**
11
- * 处理空格
12
- */
15
+ // clear blank
13
16
for ( var i = 0 ; i < jsonString . length ; i ++ ) {
14
17
if ( jsonString [ i ] == '"' ) {
15
18
onOff = onOff ? false : true
16
19
}
17
- if ( ! onOff && ( jsonString [ i ] == ' ' || jsonString [ i ] == '\n' || jsonString [ i ] == '\r' || jsonString [ i ] == '\t' ) ) {
20
+ if ( ! onOff &&
21
+ ( jsonString [ i ] == ' ' ||
22
+ jsonString [ i ] == '\n' ||
23
+ jsonString [ i ] == '\r' ||
24
+ jsonString [ i ] == '\t' ) ) {
18
25
continue
19
26
}
20
27
theJson = theJson + jsonString [ i ]
21
28
}
22
- return parse ( )
23
29
30
+ return parse ( )
24
31
/**
25
- * [ 指针指向合适的位置时进行的解析函数,根据字符串不同的表现返回不同的值]
26
- * @param {[ string] } jsonString [ 当前需要解析的字符串(可能是递归后的值)]
27
- * @param {[ number] } index) { var indexChar [指针]
28
- * @return {[*] } [ 解析后的值]
32
+ * 指针指向合适的位置时进行的解析函数,根据字符串不同的表现返回不同的值
33
+ * @param {string } jsonString 当前需要解析的字符串(可能是递归后的值)
34
+ * @param {number } index var indexChar[指针]
35
+ * @return {* } 解析后的值
29
36
*/
30
37
function parse ( ) {
31
38
var indexChar = theJson [ index ]
39
+
32
40
if ( indexChar == '{' ) {
33
41
return parseObject ( )
34
42
}
@@ -57,9 +65,10 @@ parseJson: function(jsonString) {
57
65
return parseNumber ( )
58
66
}
59
67
}
68
+
60
69
/**
61
- * [ parseNumber 解析值为数字的 value]
62
- * @return {[type] } [数字]
70
+ * parseNumber 解析值为数字的 value
71
+ * @return {number * }
63
72
*/
64
73
function parseNumber ( ) {
65
74
for ( var i = index + 1 ; ; i ++ ) {
@@ -72,9 +81,9 @@ parseJson: function(jsonString) {
72
81
return parseInt ( num )
73
82
}
74
83
/**
75
- * [ 判断一个字符能否转换为数字]
76
- * @param {[ string] } char [ 传入的单个字符]
77
- * @return {Boolean } [ 如果能转换为数字,返回true]
84
+ * 判断一个字符能否转换为数字
85
+ * @param {string } char 传入的单个字符
86
+ * @return {Boolean } 如果能转换为数字,返回true
78
87
*/
79
88
function isDigit ( char ) {
80
89
if ( ! char ) {
@@ -90,8 +99,8 @@ parseJson: function(jsonString) {
90
99
}
91
100
}
92
101
/**
93
- * [ parseString 解析值为字符串的value值]
94
- * @return {[ string] } [ 返回作为值的字符串]
102
+ * parseString 解析值为字符串的value值
103
+ * @return {string } 返回作为值的字符串
95
104
*/
96
105
function parseString ( ) {
97
106
var theEnd = theJson . indexOf ( '"' , index + 1 )
@@ -100,32 +109,32 @@ parseJson: function(jsonString) {
100
109
return theString
101
110
}
102
111
/**
103
- * [ parseNull 解析 值为null的value值]
104
- * @return {[type] } [ 返回null]
112
+ * parseNull 解析 值为null的value值
113
+ * @return {string * } 返回null
105
114
*/
106
115
function parseNull ( ) {
107
116
index += 4
108
117
return null
109
118
}
110
119
/**
111
- * [ parseFalse 解析值为 false 的 value 值]
112
- * @return {[ boolean] } [ 返回false]
120
+ * parseFalse 解析值为 false 的 value 值
121
+ * @return {boolean } 返回false
113
122
*/
114
123
function parseFalse ( ) {
115
124
index += 5
116
125
return false
117
126
}
118
127
/**
119
- * * [ parseFalse 解析值为 true 的 value 值]
120
- * @return {[ boolean] } [ 返回true]
128
+ * parseFalse 解析值为 true 的 value 值
129
+ * @return {boolean } 返回true
121
130
*/
122
131
function parseTrue ( ) {
123
132
index += 4
124
133
return true
125
134
}
126
135
/**
127
- * [ parseArray 递归解析数组]
128
- * @return {[ array] } [ 返回一个数组]
136
+ * parseArray 递归解析数组
137
+ * @return {array } 返回一个数组
129
138
*/
130
139
function parseArray ( ) {
131
140
var result = [ ] ,
@@ -146,8 +155,8 @@ parseJson: function(jsonString) {
146
155
return result
147
156
}
148
157
/**
149
- * [ parseObject 递归解析对象]
150
- * @return {[ object] } [ 返回对象]
158
+ * parseObject 递归解析对象
159
+ * @return {object } 返回对象
151
160
*/
152
161
function parseObject ( ) {
153
162
var result = { } ,
@@ -170,4 +179,8 @@ parseJson: function(jsonString) {
170
179
index ++
171
180
return result
172
181
}
173
- } ,
182
+ }
183
+
184
+
185
+
186
+
0 commit comments