我无法在golang中的两个json之间进行迭代?

时间:2018-03-13 18:58:42

标签: go

当我调用一个端点点低于两个json时。 作为回应,我需要发送一个json响应。 在Json1中,value为空,需要从Json2获取值。

我无法获取属性 LayoutSections

JSON:1

{

    "Name": "VisitDoctorLayout",
    "Kind": "Visit",
    "layoutsections": [
        {
            "label": "AccountInformation",
            "style": "TwoColumnsTopToBottom",
            "layoutcolumns": [
                {
                    "layoutitems": [
                        {
                            "behavior": "edit",
                            "name": "firstname",
                            "type": "string",
                            "label": "first Name",
                            "value": ""
                        },
                        {
                            "behavior": "Required",
                            "name": "lastname",
                            "type": "string",
                            "label": "Last Name",
                            "value": ""
                        }
                    ]
                }
            ]
        }
    ]
}

JSON:2

{"firstname":"ABC",
"lastname":"EFZ"
}

我的sruct就像下面的

type Layout struct {
    ID             string           `json:"ID"`
    Name           string           `json:"name"`
    Kind           string           `json:"kind"`
    Namespace      string           `json:"namespace"`
    LayoutSections []LayoutSections `json:"layoutsections"`
}
type LayoutSections struct {
    Label         string          `json:"label"`
    Style         string          `json:"style"`
    LayoutColumns []LayoutColumns `json:"layoutcolumns"`
}

type LayoutColumns struct {
    LayoutItems []LayoutItems `json:"layoutitems"`
}
type LayoutItems struct {
    Behavior string `json:"behavior"`
    Name     string `json:"name"`
    Type     string `json:"type"`
    Label    string `json:"label"`
    Value    string `json:"value"`
}

1 个答案:

答案 0 :(得分:0)

我不确定如果我的请求是正确的,但这里是我"映射"从Json2Json1的数据。

// Added this for the inserter json (Json2)
type Inserter struct {
    FirstName string `json:"firstname"`
    LastName  string `json:"lastname"`
}

var dat Layout
var ins Inserter

func main() {
    if err := json.Unmarshal(json1, &dat); err != nil {
        panic(err)
    }
    if err := json.Unmarshal(json2, &ins); err != nil {
        panic(err)
    }

    for sk, sec := range dat.LayoutSections {
        for ck, col := range sec.LayoutColumns {
            for ik, item := range col.LayoutItems {
                itemPointer := &dat.LayoutSections[sk].LayoutColumns[ck].LayoutItems[ik]

                switch item.Name {
                case "firstname":
                    // Setting the FirstName value:
                    itemPointer.Value = ins.FirstName
                case "lastname":
                    // Setting the LastName value:
                    itemPointer.Value = ins.LastName
                }
            }
        }
    }
}

说明:

基本上你可以深入研究:
Layout> LayoutSections> LayoutColumns> LayoutItems

然后检查您要更改的项目,在我们的案例中firstname& lastname。最后只需将Value设置为Inserter json(Json2)所包含的内容。

这是 Example 的所有细节。