为了账号安全,请及时绑定邮箱和手机立即绑定

如何使用 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 关注
  • 91 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信