| ©«¤l79 ¥DÃD19 ºëµØ0 ¿n¤À148 ÂI¦W0  §@·~¨t²ÎWINDOW7 ³nÅ骩¥»EXCEL 2003 ¾\ŪÅv20 ©Ê§O¨k µù¥U®É¶¡2017-5-21 ³Ì«áµn¿ý2023-3-13 
 | 
                
| n¥ÎEXCEL °µ ¦n§xÃø ªº n¦³ºô¶ªº°ò¦ª¾ÃÑ  ÁÙn «á¥xªºª¾ÃÑ ¤ñ¦pJSP.PHP¨ºÃþ   ¦Ó¦n¦h®É ³£¬O¤£¯à¿é¤Jªº¦h  ¦]¬°¤j¦hºô¯¸ªº¦w¥þ©Ê°ÝÃD
 
 ¥i¦æ©Ê¤£°ª   ¦Ó¥B¤£¹ê»Ú   ¤Ó³Â·Ð
 
 ºô¤W¨Ò¤l :
 
 ªþ录¤@¡GVBA处²zJSONªº类¼Ò块
 
 Option Explicit
 '================================
 ' VBA处²zJSON¤å¥óªº类¼Ò块
 '
 ' http://www.cnhup.com
 '================================
 Const INVALID_JSON      As Long = 1
 Const INVALID_OBJECT    As Long = 2
 Const INVALID_ARRAY     As Long = 3
 Const INVALID_BOOLEAN   As Long = 4
 Const INVALID_NULL      As Long = 5
 Const INVALID_KEY       As Long = 6
 
 Private Sub Class_Initialize()
 
 End Sub
 
 Private Sub Class_Terminate()
 
 End Sub
 
 Public Function parse(ByRef str As String) As Object
 
 Dim index As Long
 index = 1
 
 On Error Resume Next
 
 Call skipChar(str, index)
 Select Case Mid(str, index, 1)
 Case "{"
 Set parse = parseObject(str, index)
 Case "["
 Set parse = parseArray(str, index)
 End Select
 
 End Function
 
 Private Function parseObject(ByRef str As String, ByRef index As Long) As Object
 
 Set parseObject = CreateObject("Scripting.Dictionary")
 
 ' "{"
 Call skipChar(str, index)
 If Mid(str, index, 1) <> "{" Then Err.Raise vbObjectError + INVALID_OBJECT, Description:="char " & index & " : " & Mid(str, index)
 index = index + 1
 
 Do
 
 Call skipChar(str, index)
 If "}" = Mid(str, index, 1) Then
 index = index + 1
 Exit Do
 ElseIf "," = Mid(str, index, 1) Then
 index = index + 1
 Call skipChar(str, index)
 End If
 
 Dim key As String
 
 ' add key/value pair
 parseObject.Add key:=parseKey(str, index), Item:=parseValue(str, index)
 
 Loop
 
 End Function
 
 Private Function parseArray(ByRef str As String, ByRef index As Long) As Collection
 
 Set parseArray = New Collection
 
 ' "["
 Call skipChar(str, index)
 If Mid(str, index, 1) <> "[" Then Err.Raise vbObjectError + INVALID_ARRAY, Description:="char " & index & " : " + Mid(str, index)
 index = index + 1
 
 Do
 
 Call skipChar(str, index)
 If "]" = Mid(str, index, 1) Then
 index = index + 1
 Exit Do
 ElseIf "," = Mid(str, index, 1) Then
 index = index + 1
 Call skipChar(str, index)
 End If
 
 ' add value
 parseArray.Add parseValue(str, index)
 
 Loop
 
 End Function
 
 Private Function parseValue(ByRef str As String, ByRef index As Long)
 
 Call skipChar(str, index)
 
 Select Case Mid(str, index, 1)
 Case "{"
 Set parseValue = parseObject(str, index)
 Case "["
 Set parseValue = parseArray(str, index)
 Case """", "'"
 parseValue = parseString(str, index)
 Case "t", "f"
 parseValue = parseBoolean(str, index)
 Case "n"
 parseValue = parseNull(str, index)
 Case Else
 parseValue = parseNumber(str, index)
 End Select
 
 End Function
 | 
 |