Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ' runs in an excel workbook, produces a fairly human readable format with each data element on it's own line.
- Sub CrackJson()
- Dim FileIn As Long, FileOut As Long, FileName As String
- Dim Chunk As String, Buffer As String, Work As String, InQuote As Boolean
- Dim Level As Long, Depth As Long, CiDx As Long, Char As String, BiDx As Long
- Dim FSO As Object, Whack() As String
- FileName = "Path To JSON File"
- FileIn = FreeFile
- Open FileName For Binary As FileIn
- FileName = Replace$(FileName, ".json", ".txt")
- FileOut = FreeFile
- Open FileName For Output As FileOut
- Level = 0
- Buffer = ""
- InQuote = False
- CiDx = 1
- Do
- If (CiDx > Len(Buffer)) Then
- Depth = Seek(FileIn)
- If (Depth > LOF(FileIn)) Then Exit Do
- ' If (Depth > 32000) Then Exit Do
- Chunk = String$(4096, vbTab)
- Get #FileIn, , Chunk
- Buffer = Replace$(Buffer & Chunk, vbTab, "")
- CiDx = 1
- End If
- Char = Mid$(Buffer, CiDx, 1)
- Mid$(Buffer, CiDx, 1) = vbTab
- If (Char <> vbTab) Then
- If (InQuote) Then
- Work = Work & Char
- If (Char = "\") Then
- If (CiDx = Len(Buffer)) Then
- ' fetch one more
- Chunk = " "
- Get #FileIn, , Chunk
- Buffer = Buffer & Chunk
- End If
- Work = Work & Mid$(Buffer, CiDx + 1, 1)
- Mid$(Buffer, CiDx + 1, 1) = vbTab
- Char = vbTab
- End If
- If (Char = Chr$(34)) Then
- InQuote = False
- End If
- Else
- If (Char = "{") Then
- If (CiDx = Len(Buffer)) Then
- ' fetch one more
- Chunk = " "
- Get #FileIn, , Chunk
- Buffer = Buffer & Chunk
- End If
- If (Mid$(Buffer, CiDx + 1, 1) = "}") Then
- Work = Work & "{}"
- Mid$(Buffer, CiDx + 1, 1) = vbTab
- Else
- If (Len(Work) > 0) Then
- Print #FileOut, String$(Level * 2, 32) & Work
- Work = ""
- End If
- Print #FileOut, String$(Level * 2, 32) & "{"
- Level = Level + 1
- End If
- ElseIf (Char = "}") Then
- If (CiDx = Len(Buffer)) Then
- ' fetch one more
- Chunk = " "
- Get #FileIn, , Chunk
- Buffer = Buffer & Chunk
- End If
- If (Len(Work) > 0) Then
- Print #FileOut, String$(Level * 2, 32) & Work
- Work = ""
- End If
- Level = Level - 1
- If (Mid$(Buffer, CiDx + 1, 1) = ",") Then
- Print #FileOut, String$(Level * 2, 32) & "},"
- Mid$(Buffer, CiDx + 1, 1) = vbTab
- Else
- Print #FileOut, String$(Level * 2, 32) & "}"
- End If
- ElseIf (Char = ",") Then
- Work = Work & Char
- If (Len(Work) > 0) Then
- Print #FileOut, String$(Level * 2, 32) & Work
- Work = ""
- End If
- Else
- Work = Work & Char
- If (Char = Chr$(34)) Then
- InQuote = True
- End If
- If (Char = "[") Then
- Level = Level + 1
- End If
- If (Char = "]") Then
- Level = Level - 1
- End If
- End If ' big chain
- End If ' InQuote
- End If ' Char <> vbTab
- CiDx = CiDx + 1
- Loop
- Close
- End Sub
Advertisement
Add Comment
Please, Sign In to add comment