亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何使用 Go 在嵌套的 JSON 中進行多步搜索

如何使用 Go 在嵌套的 JSON 中進行多步搜索

Go
眼眸繁星 2023-06-19 11:05:11
我正在開發一個網站,后端使用 Go,前端使用 Angular。在 Go 中,我從數據庫中獲取原始數據并引用固定設置表(JSON 格式),然后覆蓋到相應的列。原始數據如下所示: Site  Code           Main       0700-Shift     010_A       2135-Packing   030_C       3343-Check     050_E       4355-Casting   080_H       6903-ReDo Test 020_B       2277-Scope chk 040_D我削減了設置表的一部分:[{"010_A": [{  "Code1": "010_01",  "Code2": "",  "Seq": "000 Start",},{  "Code1": "010_07",  "Code2": "010_0700",  "Seq": "010 Shift"},],"020_B": [{  "Code1": "020_69",  "Code2": "",  "Seq": "000 ReDo Test"},{  "Code1": "020_27",  "Code2": "",  "Seq": "000 Redo Combine"}],"080_H": [{  "Code1": "080_06",  "Code2": "",  "Seq": "005 Merge"},{  "Code1": "080_43",  "Code2": "",  "Seq": "010 Casting"},{  "Code1": "080_66",  "Code2": "080_6621",  "Seq": "100 Cooling"}]}]用于設置表的 Go 結構是:type Settingtable struct {    Code1    string    Code2    string    Seq      string}我先使用“Main”檢查設置表“010_A”到“080_H”,如果匹配則使用“Code”的前4位檢查設置表中的“Code2”。如果“Main”和“Code2”都匹配,則返回“Seq”并粘貼到“Site”列。以下是我堅持的地方:package mainimport ("encoding/json""fmt")func main() {    var jsonBlob = []byte(`[        {"010_A": [        {            "Code1": "010_02",            "Code2": "010_0231",            "Seq": "000 Start"        },        {            "Code1": "010_08",            "OP_CODE": "010_0822",            "Seq": "010 Shift"        }        ],         "020_B": [{            "Code1": "020_69",            "Code2": "020_7011",            "Seq": "000 ReDo Test"       },       {            "Code1": "020_27",            "Code2": "",            "Seq": "000 Redo Combine"       }       ],        "080_H": [       {            "Code1": "080_06",            "Code2": "",            "Seq": "005 Merge"       },       {            "Code1": "080_43",            "Code2": "",            "Seq": "010 Casting"       },       {            "Code1": "080_66",            "Code2": "080_6621",            "Seq": "100 Cooling"       }       ]}       ]`)它只返回第一個結果更不用說我想做的下一個功能(循環輸入搜索條件,粘貼到原始數據列..)
查看完整描述

1 回答

?
蕪湖不蕪

TA貢獻1796條經驗 獲得超7個贊

我不確定我是否正確理解你想要什么,所以我寫了一個片段:


package main


import (

    "encoding/json"

    "fmt"

    "log"

)


type Setting struct {

    Code1 string

    Code2 string

    Seq   string

}


type entry struct {

    site string

    code string

    main string

}


func main() {

    entries := []entry{

        {"", "0700-Shift", "010_A"},

        {"", "2135-Packing", "030_C"},

        {"", "3343-Check", "050_E"},

        {"", "4355-Casting", "080_H"},

        {"", "6903-ReDo Test", "020_B"},

        {"", "2277-Scope chk", "080_H"},

    }


    var jsonBlob = []byte(`[

        {"010_A": [

        {

            "Code1": "010_02",

            "Code2": "010_0231",

            "Seq": "000 Start"

        },

        {

            "Code1": "010_08",

            "OP_CODE": "010_0822",

            "Seq": "010 Shift"

        }

        ],

         "020_B": [{

            "Code1": "020_69",

            "Code2": "020_7011",

            "Seq": "000 ReDo Test"

       },

       {

            "Code1": "020_27",

            "Code2": "",

            "Seq": "000 Redo Combine"

       }

       ],

        "080_H": [

       {

            "Code1": "080_06",

            "Code2": "",

            "Seq": "005 Merge"

       },

       {

            "Code1": "080_43",

            "Code2": "",

            "Seq": "010 Casting"

       },

       {

            "Code1": "080_66",

            "Code2": "080_6621",

            "Seq": "100 Cooling"

       },

       {

          "Code1": "080_66",

          "Code2": "2277",

          "Seq": "Test"

       }

       ]}

       ]`)


    datas := []map[string][]Setting{}


    if err := json.Unmarshal(jsonBlob, &datas); err != nil {

        log.Fatal(err)

    }


    for key, settings := range datas[0] {

        for _, setting := range settings {

            for k, e := range entries {

                if e.main == key && setting.Code2 == e.code[:4] {

                    entries[k].site = setting.Seq

                }

            }

        }

    }


    fmt.Println(entries)

}


查看完整回答
反對 回復 2023-06-19
  • 1 回答
  • 0 關注
  • 132 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號