猿问

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

我正在开发一个网站,后端使用 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 main


import (

"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"

       }

       ]}

       ]`)


它只返回第一个结果更不用说我想做的下一个功能(循环输入搜索条件,粘贴到原始数据列..)


眼眸繁星
浏览 105回答 1
1回答

芜湖不芜

我不确定我是否正确理解你想要什么,所以我写了一个片段:package mainimport (    "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)}
随时随地看视频慕课网APP

相关分类

Go
我要回答