獲取如下 JSON字符:
如何 回圈讀取 data 中的資料,使用 MSScriptControl.ScriptControl,找了一些資料都無法實作,好久不弄VB了,不知道壇子里還有沒有高手指導一下,謝謝
"status": 1,
"info": "Get devices state history success",
"data": [
{
"1466744001": 0
},
{
"1466736802": 1
},
{
"1466736801": 0
},
{
"1466730484": 1
},
{
"1466729602": 1
},
{
"1466729601": 0
},
{
"1466723247": 1
},
{
"1466720287": 1
},
{
"1466720286": 0
},
{
"1466715990": 1
},
{
"1466715204": 1
},
{
"1466715200": 0
},
{
"1466708748": 1
},
{
uj5u.com熱心網友回復:
ReplaceSplit
uj5u.com熱心網友回復:
Option Explicit
Private Sub Command1_Click()
Dim strJSON As String
Dim p1&, p2 As Long
Dim i As Long
' 原始JSON文本內容
strJSON = """status"": 1," & vbCrLf & _
"""info"": ""Get devices state history success""," & vbCrLf & _
"""data"": [" & vbCrLf & _
"{" & vbCrLf & _
" ""1466744001"": 0" & vbCrLf & _
"}," & vbCrLf & _
"{" & vbCrLf & _
" ""1466736802"": 1" & vbCrLf & _
"}," & vbCrLf & _
"{" & vbCrLf & _
" ""1466736801"": 0" & vbCrLf & _
"}," & vbCrLf & _
"{" & vbCrLf & _
" ""1466730484"": 1" & vbCrLf & _
"}," & vbCrLf & _
"{" & vbCrLf & _
" ""1466729602"": 1" & vbCrLf & _
"}," & vbCrLf & _
"{" & vbCrLf & _
" ""1466729601"": 0" & vbCrLf & _
"}," & vbCrLf & _
"{" & vbCrLf & _
" ""1466723247"": 1" & vbCrLf & _
"}," & vbCrLf & _
"{" & vbCrLf
strJSON = strJSON & " ""1466720287"": 1" & vbCrLf & _
"}," & vbCrLf & _
"{" & vbCrLf & _
" ""1466720286"": 0" & vbCrLf & _
"}," & vbCrLf & _
"{" & vbCrLf & _
" ""1466715990"": 1" & vbCrLf & _
"}," & vbCrLf & _
"{" & vbCrLf & _
" ""1466715204"": 1" & vbCrLf & _
"}," & vbCrLf & _
"{" & vbCrLf & _
" ""1466715200"": 0" & vbCrLf & _
"}," & vbCrLf & _
"{" & vbCrLf & _
" ""1466708748"": 1" & vbCrLf & _
"}," & vbCrLf & _
"{"
' 資料提取:
p1 = InStr(1, strJSON, "data"":") ' 找第1個關鍵字:data":
If (p1) Then
p1 = InStr(6& + p1, strJSON, """") ' 找 “data節”內的第一個雙引號
i = 0 ' 計數變數
Do ' 回圈提取資料
If (0 = p1) Then Exit Do
p1 = p1 + 1
i = i + 1
p2 = InStr(p1, strJSON, """")
' 輸出序號及資料
Debug.Print i, Mid$(strJSON, p1, p2 - p1)
p1 = InStr(1 + p2, strJSON, """")
Loop
End If
End Sub
' 輸出內容:
' 1 1466744001
' 2 1466736802
' 3 1466736801
' 4 1466730484
' 5 1466729602
' 6 1466729601
' 7 1466723247
' 8 1466720287
' 9 1466720286
' 10 1466715990
' 11 1466715204
' 12 1466715200
' 13 1466708748
uj5u.com熱心網友回復:
謝謝樓上2位,可能我沒有說清楚,現在重新說明如下:我暫時用的是 Microsoft Script Control 1.0控制元件。
'添加 Microsoft Script Control 1.0
Private Sub Command1_Click()
' Dim JSON As Object
' Set JSON = CreateObject("MSScriptControl.ScriptControl")
' JSON.Language = "JScript"
' JSON.AddCode "var json = " & strHTTP & ";"
Dim strDlist() As String
With ScriptControl1
.Reset
.Language = "javascript"
.AddCode "var json = " & Text1.Text & ";"
strDlist = Split(.Eval("json.data"), ",")
Debug.Print .Eval("json.info")
Debug.Print .Eval("json.status")
Debug.Print .Eval("json.data") '物件陣列,如何回圈遍歷 json.data 物件 及屬性?????
End With
End Sub
示例程式可以這里下載:
http://mndsoft.com/downfiles/jsont.rar
uj5u.com熱心網友回復:
搜到一個VBS的代碼,不知道怎么轉換。有懂得網友可以參考下。在VBS中遍歷JSON資料中的陣列
現在才知道原來jscript有內置的列舉器!!!
var JSON = {
"Parse":function(jsonstring){
try{
return (new Function("return " + jsonstring + ";"))();
}catch(ex){}
return null;
}
}
function MyEnumerator(src){return new Enumerator(src);}
set d = JSON.Parse("{""a"":[{""a"":1},{""a"":2},{""a"":3}]}")
set e = MyEnumerator(d.a)
do while not e.atEnd()
Response.Write e.item().a & "<br />"
e.MoveNext()
loop
set d = JSON.Parse("{""a"":[1,2,3]}")
set e = MyEnumerator(d.a)
do while not e.atEnd()
Response.Write e.item() & "<br />"
e.MoveNext()
loop
uj5u.com熱心網友回復:
竟然是枕善居大牛的帖uj5u.com熱心網友回復:
研究了下搞出來了。Private Sub Command1_Click()
Dim strDlist() As String
With ScriptControl1
.Reset
.Language = "javascript"
.AddCode "var json = " & Text1.Text & "; var s='';for( var i=0;i< json.data.length;i++){ for(var item in json.data[i]){s=s + item+ '='+ json.data[i][item] + ','} }"
Debug.Print .Eval("s")
End With
End Sub
輸出結果:
1466744001=0,1466736802=1,1466736801=0,1466730484=1,1466729602=1,1466729601=0,1466723247=1,1466720287=1,1466720286=0,1466715990=1,1466715204=1,1466715200=0,1466708748=1,1466708001=1,1466708000=0,1466702125=1,1466702125=0,1466701511=1,1466700501=1,1466700499=0,1466694270=1,1466693023=1,1466693023=0,1466687983=1,1466687982=0,1466687031=1,1466682707=1,
主要都是在js里實作的。結果的格式具體可以在js代碼里調。
var json = "json資料內容";
var s = '';
for (var i = 0; i < json.data.length; i++) {
for (var item in json.data[i]) {
s = s + item + '=' + json.data[i][item] + ','
}
}
uj5u.com熱心網友回復:
謝謝樓上,這個可以的,我開始也猜測估計是 js代碼的事情,但是不懂JS,好久不研究VB了,偶然一個小專案碰到這個問題。再次感謝。等一下結帖。
uj5u.com熱心網友回復:
好多年前看你那邊搜藏了不少vb的精品代碼的。不知道你有沒有關于瀏覽器方面的。想找一個可以替代ie內核的瀏覽器控制元件。因為要給客戶的一個網站做自動化操作,但是webbrowser始終出現奇怪的錯誤,不止一次遇到了。而火狐谷歌就好好的,所以一直在找非ie內核的瀏覽器控制元件。如果有了解的告訴我一下,回帖可得分。
http://bbs.csdn.net/topics/391975340
uj5u.com熱心網友回復:
真的是大牛。既然問題解決了,就不參合了。以前從lz的網站上下載了不少資源,在此表示下感謝。uj5u.com熱心網友回復:
很高深啊我是菜鳥看不懂uj5u.com熱心網友回復:
很高深啊我是菜鳥看不懂uj5u.com熱心網友回復:
小河溝里面翻船。uj5u.com熱心網友回復:
很高深啊我是菜鳥看不懂uj5u.com熱心網友回復:
不懂,太難了,沒有大神嗎?uj5u.com熱心網友回復:

http://blog.csdn.net/bakw/article/details/51035338
簡易決議器
uj5u.com熱心網友回復:
有個bug, 如果值名稱是數字的話就報錯了。比如你拿樓主的資料測驗看看。 "1466715200": 0
uj5u.com熱心網友回復:
我發現這樣取可以 "data[1]['1466736802']" 把數字當陣列下標,這代碼有BUG也算不到我頭上
uj5u.com熱心網友回復:
uj5u.com熱心網友回復:
var JSON = {
"Parse":function(jsonstring){
try{
return (new Function("return " + jsonstring + ";"))();
}catch(ex){}
return null;
}
}
function MyEnumerator(src){return new Enumerator(src);}
set d = JSON.Parse("{""a"":[{""a"":1},{""a"":2},{""a"":3}]}")
set e = MyEnumerator(d.a)
do while not e.atEnd()
Response.Write e.item().a & "<br />"
e.MoveNext()
loop
set d = JSON.Parse("{""a"":[1,2,3]}")
set e = MyEnumerator(d.a)
do while not e.atEnd()
Response.Write e.item() & "<br />"
e.MoveNext()
loop這個可以
uj5u.com熱心網友回復:
222222222222222216

uj5u.com熱心網友回復:
很高深啊我是菜鳥看不懂uj5u.com熱心網友回復:
laixuexileuj5u.com熱心網友回復:
laixuexiuj5u.com熱心網友回復:
直接用javascript 處理就行。uj5u.com熱心網友回復:
看看是什么~uj5u.com熱心網友回復:

uj5u.com熱心網友回復:
uj5u.com熱心網友回復:
好東西 謝謝uj5u.com熱心網友回復:
看看是什么~uj5u.com熱心網友回復:
不知道dddddduj5u.com熱心網友回復:
learning~uj5u.com熱心網友回復:
VB6訪問json方法很多種而沒有統一的標準,代碼風格還是需要和專案保持一致。這里給一種在github看到的VB6_JSON_Parsehttps://github.com/greatbody/VB6_JSON_Parse
uj5u.com熱心網友回復:
Dim ScriptObj As ObjectSet ScriptObj = CreateObject("MSScriptControl.ScriptControl")
ScriptObj.AllowUI = True
ScriptObj.language = "JavaScript"
ScriptObj.AddCode "var data = " & JSONCode & ";"
'立即視窗顯示第一個delist_time
sendjgcode = ScriptObj.Eval("data.code")
sendjgstr = ScriptObj.Eval("data.msg")
sendmsgs = ScriptObj.Eval("data.datas.length")
send1 = ScriptObj.Eval("data.datas[0].fee")
MsgBox sendjgcode & vbCrLf & sendjgstr & vbCrLf & sendmsgs & vbCrLf & send1
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/36961.html
標籤:控件
下一篇:vb 回圈結構
