主頁 > 軟體工程 > 請教有關JSON 中物件陣列處理

請教有關JSON 中物件陣列處理

2020-09-14 16:50:24 軟體工程

獲取如下 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熱心網友回復:

Replace
Split

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熱心網友回復:

參考 7 樓 mndsoft 的回復:
謝謝樓上,這個可以的,我開始也猜測估計是 js代碼的事情,但是不懂JS,好久不研究VB了,偶然一個小專案碰到這個問題。
再次感謝。等一下結帖。
好多年前看你那邊搜藏了不少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熱心網友回復:

參考 15 樓 bakw 的回復:

http://blog.csdn.net/bakw/article/details/51035338
簡易決議器
有個bug, 如果值名稱是數字的話就報錯了。比如你拿樓主的資料測驗看看。 "1466715200": 0 

uj5u.com熱心網友回復:

參考 16 樓 sysdzw 的回復:
Quote: 參考 15 樓 bakw 的回復:


http://blog.csdn.net/bakw/article/details/51035338
簡易決議器
有個bug, 如果值名稱是數字的話就報錯了。比如你拿樓主的資料測驗看看。 "1466715200": 0 



我發現這樣取可以 "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熱心網友回復:

laixuexile

uj5u.com熱心網友回復:

laixuexi

uj5u.com熱心網友回復:

直接用javascript 處理就行。

uj5u.com熱心網友回復:

看看是什么~

uj5u.com熱心網友回復:

uj5u.com熱心網友回復:

uj5u.com熱心網友回復:

好東西 謝謝

uj5u.com熱心網友回復:

看看是什么~ 

uj5u.com熱心網友回復:

不知道dddddd

uj5u.com熱心網友回復:

learning~

uj5u.com熱心網友回復:

VB6訪問json方法很多種而沒有統一的標準,代碼風格還是需要和專案保持一致。這里給一種在github看到的VB6_JSON_Parse
https://github.com/greatbody/VB6_JSON_Parse

uj5u.com熱心網友回復:

    Dim ScriptObj As Object
    Set 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

標籤:控件

上一篇:win10 bitblt設備復制為空

下一篇:vb 回圈結構

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • Git本地庫既關聯GitHub又關聯Gitee

    創建代碼倉庫 使用gitee舉例(github和gitee差不多) 1.在gitee右上角點擊+,選擇新建倉庫 ? 2.選擇填寫倉庫資訊,然后進行創建 ? 3.服務端已經準備好了,本地開始作準備 (1)Git 全域設定 git config --global user.name "成鈺" git c ......

    uj5u.com 2020-09-10 05:04:14 more
  • CODING DevOps 代碼質量實戰系列第二課,相約周三

    隨著 ToB(企業服務)的興起和 ToC(消費互聯網)產品進入成熟期,線上故障帶來的損失越來越大,代碼質量越來越重要,而「質量內建」正是 DevOps 核心理念之一。**《DevOps 代碼質量實戰(PHP 版)》**為 CODING DevOps 代碼質量實戰系列的第二課,同時也是本系列的 PHP ......

    uj5u.com 2020-09-10 05:07:43 more
  • 推薦Scrum書籍

    推薦Scrum書籍 直接上干貨,推薦書籍清單如下(推薦有順序的哦) Scrum指南 Scrum精髓 Scrum敏捷軟體開發 Scrum捷徑 硝煙中的Scrum和XP : 我們如何實施Scrum 敏捷軟體開發:Scrum實戰指南 Scrum要素 大規模Scrum:大規模敏捷組織的設計 用戶故事地圖 用 ......

    uj5u.com 2020-09-10 05:07:45 more
  • CODING DevOps 代碼質量實戰系列最后一課,周四發車

    隨著 ToB(企業服務)的興起和 ToC(消費互聯網)產品進入成熟期,線上故障帶來的損失越來越大,代碼質量越來越重要,而「質量內建」正是 DevOps 核心理念之一。 **《DevOps 代碼質量實戰(Java 版)》**為 CODING DevOps 代碼質量實戰系列的最后一課,同時也是本系列的 ......

    uj5u.com 2020-09-10 05:07:52 more
  • 敏捷軟體工程實踐書籍

    Scrum轉型想要做好,第一步先了解并真正落實Scrum,那么我推薦的Scrum書籍是要看懂并實踐的。第二步是團隊的工程實踐要做扎實。 下面推薦工程實踐書單: 重構:改善既有代碼的設計 決議極限編程 : 擁抱變化 代碼整潔代碼 程式員的職業素養 修改代碼的藝術 撰寫可讀代碼的藝術 測驗驅動開發 : ......

    uj5u.com 2020-09-10 05:07:55 more
  • Jenkins+svn+nginx實作windows環境自動部署vue前端專案

    前面文章介紹了Jenkins+svn+tomcat實作自動化部署,現在終于有空抽時間出來寫下Jenkins+svn+nginx實作自動部署vue前端專案。 jenkins的安裝和配置已經在前面文章進行介紹,下面介紹實作vue前端專案需要進行的哪些額外的步驟。 注意:在安裝jenkins和nginx的 ......

    uj5u.com 2020-09-10 05:08:49 more
  • CODING DevOps 微服務專案實戰系列第一課,明天等你

    CODING DevOps 微服務專案實戰系列第一課**《DevOps 微服務專案實戰:DevOps 初體驗》**將由 CODING DevOps 開發工程師 王寬老師 向大家介紹 DevOps 的基本理念,并探討為什么現代開發活動需要 DevOps,同時將以 eShopOnContainers 項 ......

    uj5u.com 2020-09-10 05:09:14 more
  • CODING DevOps 微服務專案實戰系列第二課來啦!

    近年來,工程專案的結構越來越復雜,需要接入合適的持續集成流水線形式,才能滿足更多變的需求,那么如何優雅地使用 CI 能力提升生產效率呢?CODING DevOps 微服務專案實戰系列第二課 《DevOps 微服務專案實戰:CI 進階用法》 將由 CODING DevOps 全堆疊工程師 何晨哲老師 向 ......

    uj5u.com 2020-09-10 05:09:33 more
  • CODING DevOps 微服務專案實戰系列最后一課,周四開講!

    隨著軟體工程越來越復雜化,如何在 Kubernetes 集群進行灰度發布成為了生產部署的”必修課“,而如何實作安全可控、自動化的灰度發布也成為了持續部署重點關注的問題。CODING DevOps 微服務專案實戰系列最后一課:**《DevOps 微服務專案實戰:基于 Nginx-ingress 的自動 ......

    uj5u.com 2020-09-10 05:10:00 more
  • CODING 儀表盤功能正式推出,實作作業資料可視化!

    CODING 儀表盤功能現已正式推出!該功能旨在用一張張統計卡片的形式,統計并展示使用 CODING 中所產生的資料。這意味著無需額外的設定,就可以收集歸納寶貴的作業資料并予之量化分析。這些海量的資料皆會以圖表或串列的方式躍然紙上,方便團隊成員隨時查看各專案的進度、狀態和指標,云端協作迎來真正意義上 ......

    uj5u.com 2020-09-10 05:11:01 more
最新发布
  • windows系統git使用ssh方式和gitee/github進行同步

    使用git來clone專案有兩種方式:HTTPS和SSH:
    HTTPS:不管是誰,拿到url隨便clone,但是在push的時候需要驗證用戶名和密碼;
    SSH:clone的專案你必須是擁有者或者管理員,而且需要在clone前添加SSH Key。SSH 在push的時候,是不需要輸入用戶名的,如果配置... ......

    uj5u.com 2023-04-19 08:41:12 more
  • windows系統git使用ssh方式和gitee/github進行同步

    使用git來clone專案有兩種方式:HTTPS和SSH:
    HTTPS:不管是誰,拿到url隨便clone,但是在push的時候需要驗證用戶名和密碼;
    SSH:clone的專案你必須是擁有者或者管理員,而且需要在clone前添加SSH Key。SSH 在push的時候,是不需要輸入用戶名的,如果配置... ......

    uj5u.com 2023-04-19 08:35:34 more
  • 2023年農牧行業6大CRM系統、5大場景盤點

    在物聯網、大資料、云計算、人工智能、自動化技術等現代資訊技術蓬勃發展與逐步成熟的背景下,數字化正成為農牧行業供給側結構性變革與高質量發展的核心驅動因素。因此,改造和提升傳統農牧業、開拓創新現代智慧農牧業,加快推進農牧業的現代化、資訊化、數字化建設已成為農牧業發展的重要方向。 當下,企業數字化轉型已經 ......

    uj5u.com 2023-04-18 08:05:44 more
  • 2023年農牧行業6大CRM系統、5大場景盤點

    在物聯網、大資料、云計算、人工智能、自動化技術等現代資訊技術蓬勃發展與逐步成熟的背景下,數字化正成為農牧行業供給側結構性變革與高質量發展的核心驅動因素。因此,改造和提升傳統農牧業、開拓創新現代智慧農牧業,加快推進農牧業的現代化、資訊化、數字化建設已成為農牧業發展的重要方向。 當下,企業數字化轉型已經 ......

    uj5u.com 2023-04-18 08:00:18 more
  • 計算機組成原理—存盤器

    計算機組成原理—硬體結構 二、存盤器 1.概述 存盤器是計算機系統中的記憶設備,用來存放程式和資料 1.1存盤器的層次結構 快取-主存層次主要解決CPU和主存速度不匹配的問題,速度接近快取 主存-輔存層次主要解決存盤系統的容量問題,容量接近與價位接近于主存 2.主存盤器 2.1概述 主存與CPU的聯 ......

    uj5u.com 2023-04-17 08:20:31 more
  • 談一談我對協同開發的一些認識

    如今各互聯網公司普通都使用敏捷開發,采用小步快跑的形式來進行專案開發。如果是小專案或者小需求,那一個開發可能就搞定了。但對于電商等復雜的系統,其功能多,結構復雜,一個人肯定是搞不定的,所以都是很多人來共同開發維護。以我曾經待過的商城團隊為例,光是后端開發就有七十多人。 為了更好地開發這類大型系統,往 ......

    uj5u.com 2023-04-17 08:18:55 more
  • 專案管理PRINCE2核心知識點整理

    PRINCE2,即 PRoject IN Controlled Environment(受控環境中的專案)是一種結構化的專案管理方法論,由英國政府內閣商務部(OGC)推出,是英國專案管理標準。
    PRINCE2 作為一種開放的方法論,是一套結構化的專案管理流程,描述了如何以一種邏輯性的、有組織的方法,... ......

    uj5u.com 2023-04-17 08:18:51 more
  • 談一談我對協同開發的一些認識

    如今各互聯網公司普通都使用敏捷開發,采用小步快跑的形式來進行專案開發。如果是小專案或者小需求,那一個開發可能就搞定了。但對于電商等復雜的系統,其功能多,結構復雜,一個人肯定是搞不定的,所以都是很多人來共同開發維護。以我曾經待過的商城團隊為例,光是后端開發就有七十多人。 為了更好地開發這類大型系統,往 ......

    uj5u.com 2023-04-17 08:18:00 more
  • 專案管理PRINCE2核心知識點整理

    PRINCE2,即 PRoject IN Controlled Environment(受控環境中的專案)是一種結構化的專案管理方法論,由英國政府內閣商務部(OGC)推出,是英國專案管理標準。
    PRINCE2 作為一種開放的方法論,是一套結構化的專案管理流程,描述了如何以一種邏輯性的、有組織的方法,... ......

    uj5u.com 2023-04-17 08:17:55 more
  • 計算機組成原理—存盤器

    計算機組成原理—硬體結構 二、存盤器 1.概述 存盤器是計算機系統中的記憶設備,用來存放程式和資料 1.1存盤器的層次結構 快取-主存層次主要解決CPU和主存速度不匹配的問題,速度接近快取 主存-輔存層次主要解決存盤系統的容量問題,容量接近與價位接近于主存 2.主存盤器 2.1概述 主存與CPU的聯 ......

    uj5u.com 2023-04-17 08:12:06 more