210 lines
		
	
	
		
			4.4 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
		
		
			
		
	
	
			210 lines
		
	
	
		
			4.4 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
| 
								 | 
							
								<%
							 | 
						|||
| 
								 | 
							
								'
							 | 
						|||
| 
								 | 
							
								'	VBS JSON 2.0.3
							 | 
						|||
| 
								 | 
							
								'	Copyright (c) 2009 Tu<54>rul Topuz
							 | 
						|||
| 
								 | 
							
								'	Under the MIT (MIT-LICENSE.txt) license.
							 | 
						|||
| 
								 | 
							
								'
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								Const JSON_OBJECT	= 0
							 | 
						|||
| 
								 | 
							
								Const JSON_ARRAY	= 1
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								Class jsCore
							 | 
						|||
| 
								 | 
							
									Public Collection
							 | 
						|||
| 
								 | 
							
									Public Count
							 | 
						|||
| 
								 | 
							
									Public QuotedVars
							 | 
						|||
| 
								 | 
							
									Public Kind ' 0 = object, 1 = array
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
									Private Sub Class_Initialize
							 | 
						|||
| 
								 | 
							
										Set Collection = CreateObject("Scripting.Dictionary")
							 | 
						|||
| 
								 | 
							
										QuotedVars = True
							 | 
						|||
| 
								 | 
							
										Count = 0
							 | 
						|||
| 
								 | 
							
									End Sub
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
									Private Sub Class_Terminate
							 | 
						|||
| 
								 | 
							
										Set Collection = Nothing
							 | 
						|||
| 
								 | 
							
									End Sub
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
									' counter
							 | 
						|||
| 
								 | 
							
									Private Property Get Counter 
							 | 
						|||
| 
								 | 
							
										Counter = Count
							 | 
						|||
| 
								 | 
							
										Count = Count + 1
							 | 
						|||
| 
								 | 
							
									End Property
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
									' - data maluplation
							 | 
						|||
| 
								 | 
							
									' -- pair
							 | 
						|||
| 
								 | 
							
									Public Property Let Pair(p, v)
							 | 
						|||
| 
								 | 
							
										If IsNull(p) Then p = Counter
							 | 
						|||
| 
								 | 
							
										Collection(p) = v
							 | 
						|||
| 
								 | 
							
									End Property
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
									Public Property Set Pair(p, v)
							 | 
						|||
| 
								 | 
							
										If IsNull(p) Then p = Counter
							 | 
						|||
| 
								 | 
							
										If TypeName(v) <> "jsCore" Then
							 | 
						|||
| 
								 | 
							
											Err.Raise &hD, "class: class", "Incompatible types: '" & TypeName(v) & "'"
							 | 
						|||
| 
								 | 
							
										End If
							 | 
						|||
| 
								 | 
							
										Set Collection(p) = v
							 | 
						|||
| 
								 | 
							
									End Property
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
									Public Default Property Get Pair(p)
							 | 
						|||
| 
								 | 
							
										If IsNull(p) Then p = Count - 1
							 | 
						|||
| 
								 | 
							
										If IsObject(Collection(p)) Then
							 | 
						|||
| 
								 | 
							
											Set Pair = Collection(p)
							 | 
						|||
| 
								 | 
							
										Else
							 | 
						|||
| 
								 | 
							
											Pair = Collection(p)
							 | 
						|||
| 
								 | 
							
										End If
							 | 
						|||
| 
								 | 
							
									End Property
							 | 
						|||
| 
								 | 
							
									' -- pair
							 | 
						|||
| 
								 | 
							
									Public Sub Clean
							 | 
						|||
| 
								 | 
							
										Collection.RemoveAll
							 | 
						|||
| 
								 | 
							
									End Sub
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
									Public Sub Remove(vProp)
							 | 
						|||
| 
								 | 
							
										Collection.Remove vProp
							 | 
						|||
| 
								 | 
							
									End Sub
							 | 
						|||
| 
								 | 
							
									' data maluplation
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
									' encoding
							 | 
						|||
| 
								 | 
							
									Function jsEncode(str)
							 | 
						|||
| 
								 | 
							
										Dim charmap(127), haystack()
							 | 
						|||
| 
								 | 
							
										charmap(8)  = "\b"
							 | 
						|||
| 
								 | 
							
										charmap(9)  = "\t"
							 | 
						|||
| 
								 | 
							
										charmap(10) = "\n"
							 | 
						|||
| 
								 | 
							
										charmap(12) = "\f"
							 | 
						|||
| 
								 | 
							
										charmap(13) = "\r"
							 | 
						|||
| 
								 | 
							
										charmap(34) = "\"""
							 | 
						|||
| 
								 | 
							
										charmap(47) = "\/"
							 | 
						|||
| 
								 | 
							
										charmap(92) = "\\"
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
										Dim strlen : strlen = Len(str) - 1
							 | 
						|||
| 
								 | 
							
										ReDim haystack(strlen)
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
										Dim i, charcode
							 | 
						|||
| 
								 | 
							
										For i = 0 To strlen
							 | 
						|||
| 
								 | 
							
											haystack(i) = Mid(str, i + 1, 1)
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
											charcode = AscW(haystack(i)) And 65535
							 | 
						|||
| 
								 | 
							
											If charcode < 127 Then
							 | 
						|||
| 
								 | 
							
												If Not IsEmpty(charmap(charcode)) Then
							 | 
						|||
| 
								 | 
							
													haystack(i) = charmap(charcode)
							 | 
						|||
| 
								 | 
							
												ElseIf charcode < 32 Then
							 | 
						|||
| 
								 | 
							
													haystack(i) = "\u" & Right("000" & Hex(charcode), 4)
							 | 
						|||
| 
								 | 
							
												End If
							 | 
						|||
| 
								 | 
							
											Else
							 | 
						|||
| 
								 | 
							
												haystack(i) = "\u" & Right("000" & Hex(charcode), 4)
							 | 
						|||
| 
								 | 
							
											End If
							 | 
						|||
| 
								 | 
							
										Next
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
										jsEncode = Join(haystack, "")
							 | 
						|||
| 
								 | 
							
									End Function
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
									' converting
							 | 
						|||
| 
								 | 
							
									Public Function toJSON(vPair)
							 | 
						|||
| 
								 | 
							
										Select Case VarType(vPair)
							 | 
						|||
| 
								 | 
							
											Case 0	' Empty
							 | 
						|||
| 
								 | 
							
												toJSON = "null"
							 | 
						|||
| 
								 | 
							
											Case 1	' Null
							 | 
						|||
| 
								 | 
							
												toJSON = "null"
							 | 
						|||
| 
								 | 
							
											Case 7	' Date
							 | 
						|||
| 
								 | 
							
												' toJSON = "new Date(" & (vPair - CDate(25569)) * 86400000 & ")"	' let in only utc time
							 | 
						|||
| 
								 | 
							
												toJSON = """" & CStr(vPair) & """"
							 | 
						|||
| 
								 | 
							
											Case 8	' String
							 | 
						|||
| 
								 | 
							
												toJSON = """" & jsEncode(vPair) & """"
							 | 
						|||
| 
								 | 
							
											Case 9	' Object
							 | 
						|||
| 
								 | 
							
												Dim bFI,i 
							 | 
						|||
| 
								 | 
							
												bFI = True
							 | 
						|||
| 
								 | 
							
												If vPair.Kind Then toJSON = toJSON & "[" Else toJSON = toJSON & "{"
							 | 
						|||
| 
								 | 
							
												For Each i In vPair.Collection
							 | 
						|||
| 
								 | 
							
													If bFI Then bFI = False Else toJSON = toJSON & ","
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
													If vPair.Kind Then 
							 | 
						|||
| 
								 | 
							
														toJSON = toJSON & toJSON(vPair(i))
							 | 
						|||
| 
								 | 
							
													Else
							 | 
						|||
| 
								 | 
							
														If QuotedVars Then
							 | 
						|||
| 
								 | 
							
															toJSON = toJSON & """" & i & """:" & toJSON(vPair(i))
							 | 
						|||
| 
								 | 
							
														Else
							 | 
						|||
| 
								 | 
							
															toJSON = toJSON & i & ":" & toJSON(vPair(i))
							 | 
						|||
| 
								 | 
							
														End If
							 | 
						|||
| 
								 | 
							
													End If
							 | 
						|||
| 
								 | 
							
												Next
							 | 
						|||
| 
								 | 
							
												If vPair.Kind Then toJSON = toJSON & "]" Else toJSON = toJSON & "}"
							 | 
						|||
| 
								 | 
							
											Case 11
							 | 
						|||
| 
								 | 
							
												If vPair Then toJSON = "true" Else toJSON = "false"
							 | 
						|||
| 
								 | 
							
											Case 12, 8192, 8204
							 | 
						|||
| 
								 | 
							
												toJSON = RenderArray(vPair, 1, "")
							 | 
						|||
| 
								 | 
							
											Case Else
							 | 
						|||
| 
								 | 
							
												toJSON = Replace(vPair, ",", ".")
							 | 
						|||
| 
								 | 
							
										End select
							 | 
						|||
| 
								 | 
							
									End Function
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
									Function RenderArray(arr, depth, parent)
							 | 
						|||
| 
								 | 
							
										Dim first : first = LBound(arr, depth)
							 | 
						|||
| 
								 | 
							
										Dim last : last = UBound(arr, depth)
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
										Dim index, rendered
							 | 
						|||
| 
								 | 
							
										Dim limiter : limiter = ","
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
										RenderArray = "["
							 | 
						|||
| 
								 | 
							
										For index = first To last
							 | 
						|||
| 
								 | 
							
											If index = last Then
							 | 
						|||
| 
								 | 
							
												limiter = ""
							 | 
						|||
| 
								 | 
							
											End If 
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
											On Error Resume Next
							 | 
						|||
| 
								 | 
							
											rendered = RenderArray(arr, depth + 1, parent & index & "," )
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
											If Err = 9 Then
							 | 
						|||
| 
								 | 
							
												On Error GoTo 0
							 | 
						|||
| 
								 | 
							
												RenderArray = RenderArray & toJSON(Eval("arr(" & parent & index & ")")) & limiter
							 | 
						|||
| 
								 | 
							
											Else
							 | 
						|||
| 
								 | 
							
												RenderArray = RenderArray & rendered & "" & limiter
							 | 
						|||
| 
								 | 
							
											End If
							 | 
						|||
| 
								 | 
							
										Next
							 | 
						|||
| 
								 | 
							
										RenderArray = RenderArray & "]"
							 | 
						|||
| 
								 | 
							
									End Function
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
									Public Property Get jsString
							 | 
						|||
| 
								 | 
							
										jsString = toJSON(Me)
							 | 
						|||
| 
								 | 
							
									End Property
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
									Sub Flush
							 | 
						|||
| 
								 | 
							
										If TypeName(Response) <> "Empty" Then 
							 | 
						|||
| 
								 | 
							
											Response.Write(jsString)
							 | 
						|||
| 
								 | 
							
										ElseIf WScript <> Empty Then 
							 | 
						|||
| 
								 | 
							
											WScript.Echo(jsString)
							 | 
						|||
| 
								 | 
							
										End If
							 | 
						|||
| 
								 | 
							
									End Sub
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
									Public Function Clone
							 | 
						|||
| 
								 | 
							
										Set Clone = ColClone(Me)
							 | 
						|||
| 
								 | 
							
									End Function
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
									Private Function ColClone(core)
							 | 
						|||
| 
								 | 
							
										Dim jsc, i
							 | 
						|||
| 
								 | 
							
										Set jsc = new jsCore
							 | 
						|||
| 
								 | 
							
										jsc.Kind = core.Kind
							 | 
						|||
| 
								 | 
							
										For Each i In core.Collection
							 | 
						|||
| 
								 | 
							
											If IsObject(core(i)) Then
							 | 
						|||
| 
								 | 
							
												Set jsc(i) = ColClone(core(i))
							 | 
						|||
| 
								 | 
							
											Else
							 | 
						|||
| 
								 | 
							
												jsc(i) = core(i)
							 | 
						|||
| 
								 | 
							
											End If
							 | 
						|||
| 
								 | 
							
										Next
							 | 
						|||
| 
								 | 
							
										Set ColClone = jsc
							 | 
						|||
| 
								 | 
							
									End Function
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								End Class
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								Function jsObject
							 | 
						|||
| 
								 | 
							
									Set jsObject = new jsCore
							 | 
						|||
| 
								 | 
							
									jsObject.Kind = JSON_OBJECT
							 | 
						|||
| 
								 | 
							
								End Function
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								Function jsArray
							 | 
						|||
| 
								 | 
							
									Set jsArray = new jsCore
							 | 
						|||
| 
								 | 
							
									jsArray.Kind = JSON_ARRAY
							 | 
						|||
| 
								 | 
							
								End Function
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								Function toJSON(val)
							 | 
						|||
| 
								 | 
							
									toJSON = (new jsCore).toJSON(val)
							 | 
						|||
| 
								 | 
							
								End Function
							 | 
						|||
| 
								 | 
							
								%>
							 |