iT邦幫忙

1

Excel VBA - Json資料相關問題

  • 分享至 

  • xImage

繼上次爬蟲抓Ajax資料的問題,在抓資料後又陸續有其他問題,
(1) 能抓的資料長度是否有限制?我看Debug.Print中資料有被截斷,大概都只能抓到1000多字,請問這有什麼建議的處理方式嗎?
(2) 用以下寫法抓了幾個網頁的資料後發現雖然看起來是Json格式,但想用網路上教的JsonConverter解析一直失敗(Err.Raise 10001, “JSONConverter”, json_ParseErrorMessage(JsonString, json_Index, “Expecting ‘{‘ or ‘[‘”)),但我不確定原因是不是key:value中的value沒有雙括號,如果有知道原因/解法的人可以分享嗎~
(其中一個測試網頁:https://app.launchdarkly.com/sdk/evalx/5afa3d7607a72221591aeb73/users/eyJrZXkiOiJtYXJrZXRpbmdFbmdpbmVlcmluZyIsImN1c3RvbSI6eyJjb2hvcnQiOjg3LCJsb2NhdGlvbiI6Imh0dHBzOi8vd3d3LmF0bGFzc2lhbi5jb20vdHJ1c3QifX0)

   Dim myXML As Object
   Set myXML = CreateObject("Microsoft.XMLHTTP")
    
   With myXML
        .Open "GET", URL3, False
        .setRequestHeader "Content-Type", "application/json;charset=utf-8"
        .send
        Debug.Print (.responseText)
   End With
    
   Dim Response As String
   Dim JsonObject As Object
   Response = myXML.responseText
   Set JsonObject = JsonConverter.ParseJson(Response)

謝謝~~

froce iT邦大師 1 級 ‧ 2022-03-04 16:15:21 檢舉
我會建議不要用VBA寫,python好寫多了,再輸出excel就好。
Misty0723 iT邦新手 3 級 ‧ 2022-03-06 02:44:30 檢舉
真的,我看網路上大部分都是用Python寫的,但因為我第一個入門的程式是VBA,所以想要盡可能找答案,如果在這裡發問還是沒有結果我就會比較甘心死心,謝謝你啦:-)
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 個回答

1
blanksoul12
iT邦研究生 5 級 ‧ 2022-03-03 09:26:07

Debug.Print 是有字數 "顯示限制" 的.
可以試試用這個把所有字 copy 出來,再自己放入 notepad 看

Function CopyToClipbox(strText)

    With CreateObject("new:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}")
        .SetText strText
        .PutInClipboard
    End With
    
End Function

用點時間及心機再看看之前給出那條對岸link.

看更多先前的回應...收起先前的回應...
Misty0723 iT邦新手 3 級 ‧ 2022-03-06 03:08:49 檢舉

好的,目前這個函數我還沒試成功,找時間再來研究,對岸那條link內容很多,本來想說碰到什麼問題再從裡面去找,但看起來還是要從頭看到尾比較好,謝謝你!~

blanksoul12 iT邦研究生 5 級 ‧ 2022-03-07 08:58:03 檢舉

這樣,對岸 link 入面也有介紹如何把得回來的 json 拆解的

Sub test()

a = "gnkldsjgkljklg"
CopyToClipbox a

End Sub

Function CopyToClipbox(strText)

    With CreateObject("new:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}")
        .SetText strText
        .PutInClipboard
    End With
    
End Function
Misty0723 iT邦新手 3 級 ‧ 2022-03-07 18:13:17 檢舉

今天試好了,感謝你~~
(1) 要先引用Microsoft Forms 2.0 Object Library (FM20.DLL)
(2) 如果將CopyToClipbox寫為Function,等執行完整個Sub剪貼簿會是複製不到資料,但如果直接在Sub內寫入程式碼,執行完後剪貼簿會有完整資料~Good~結果貼到Word中竟然180多頁

    With CreateObject("new:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}")
        .SetText strText
        .PutInClipboard
    End With
blanksoul12 iT邦研究生 5 級 ‧ 2022-03-08 08:43:26 檢舉

其實用這個 function 是給你作斷點來做測試的,因為程序完成後是不再需要這個 function 了,所以我一般不會把這個寫入 sub 內的.其實只需要知道能否取出資料便可以了,跟隨便是處理取出來的 json 作拆解吧.

Misty0723 iT邦新手 3 級 ‧ 2022-03-08 10:23:58 檢舉

對~所以取出資料後就把它註解掉了,只是覺得很有趣,順便觀察程式碼放的位置或方式對結果的影響,謝謝你~

我要發表回答

立即登入回答