DreamDancer

Pretty Formatting Trello JSON Files

Sep 21st, 2013
105
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. ' runs in an excel workbook, produces a fairly human readable format with each data element on it's own line.
  2.  
  3. Sub CrackJson()
  4. Dim FileIn As Long, FileOut As Long, FileName As String
  5. Dim Chunk As String, Buffer As String, Work As String, InQuote As Boolean
  6. Dim Level As Long, Depth As Long, CiDx As Long, Char As String, BiDx As Long
  7. Dim FSO As Object, Whack() As String
  8.  
  9.   FileName = "Path To JSON File"
  10.   FileIn = FreeFile
  11.   Open FileName For Binary As FileIn
  12.   FileName = Replace$(FileName, ".json", ".txt")
  13.   FileOut = FreeFile
  14.   Open FileName For Output As FileOut
  15.   Level = 0
  16.   Buffer = ""
  17.   InQuote = False
  18.   CiDx = 1
  19.   Do
  20.     If (CiDx > Len(Buffer)) Then
  21.       Depth = Seek(FileIn)
  22.       If (Depth > LOF(FileIn)) Then Exit Do
  23.       ' If (Depth > 32000) Then Exit Do
  24.      Chunk = String$(4096, vbTab)
  25.       Get #FileIn, , Chunk
  26.       Buffer = Replace$(Buffer & Chunk, vbTab, "")
  27.       CiDx = 1
  28.     End If
  29.     Char = Mid$(Buffer, CiDx, 1)
  30.     Mid$(Buffer, CiDx, 1) = vbTab
  31.     If (Char <> vbTab) Then
  32.       If (InQuote) Then
  33.         Work = Work & Char
  34.         If (Char = "\") Then
  35.           If (CiDx = Len(Buffer)) Then
  36.             ' fetch one more
  37.            Chunk = " "
  38.             Get #FileIn, , Chunk
  39.             Buffer = Buffer & Chunk
  40.           End If
  41.           Work = Work & Mid$(Buffer, CiDx + 1, 1)
  42.           Mid$(Buffer, CiDx + 1, 1) = vbTab
  43.           Char = vbTab
  44.         End If
  45.         If (Char = Chr$(34)) Then
  46.           InQuote = False
  47.         End If
  48.       Else
  49.         If (Char = "{") Then
  50.           If (CiDx = Len(Buffer)) Then
  51.             ' fetch one more
  52.            Chunk = " "
  53.             Get #FileIn, , Chunk
  54.             Buffer = Buffer & Chunk
  55.           End If
  56.           If (Mid$(Buffer, CiDx + 1, 1) = "}") Then
  57.             Work = Work & "{}"
  58.             Mid$(Buffer, CiDx + 1, 1) = vbTab
  59.           Else
  60.             If (Len(Work) > 0) Then
  61.               Print #FileOut, String$(Level * 2, 32) & Work
  62.               Work = ""
  63.             End If
  64.             Print #FileOut, String$(Level * 2, 32) & "{"
  65.             Level = Level + 1
  66.           End If
  67.         ElseIf (Char = "}") Then
  68.           If (CiDx = Len(Buffer)) Then
  69.             ' fetch one more
  70.            Chunk = " "
  71.             Get #FileIn, , Chunk
  72.             Buffer = Buffer & Chunk
  73.           End If
  74.           If (Len(Work) > 0) Then
  75.             Print #FileOut, String$(Level * 2, 32) & Work
  76.             Work = ""
  77.           End If
  78.           Level = Level - 1
  79.           If (Mid$(Buffer, CiDx + 1, 1) = ",") Then
  80.             Print #FileOut, String$(Level * 2, 32) & "},"
  81.             Mid$(Buffer, CiDx + 1, 1) = vbTab
  82.           Else
  83.             Print #FileOut, String$(Level * 2, 32) & "}"
  84.           End If
  85.         ElseIf (Char = ",") Then
  86.           Work = Work & Char
  87.           If (Len(Work) > 0) Then
  88.             Print #FileOut, String$(Level * 2, 32) & Work
  89.             Work = ""
  90.           End If
  91.         Else
  92.           Work = Work & Char
  93.           If (Char = Chr$(34)) Then
  94.             InQuote = True
  95.           End If
  96.           If (Char = "[") Then
  97.             Level = Level + 1
  98.           End If
  99.           If (Char = "]") Then
  100.             Level = Level - 1
  101.           End If
  102.         End If ' big chain
  103.      End If ' InQuote
  104.    End If ' Char <> vbTab
  105.    CiDx = CiDx + 1
  106.   Loop
  107.   Close
  108.  
  109. End Sub
Advertisement
Add Comment
Please, Sign In to add comment