@sogninitri

Как распарсить json вложенных структур?

Есть следующий код:

type list struct {
				One struct {
					One1 string `json:"one_1"`
					One2 string `json:"one_2"`
				} `json:"one"`
				Two struct {
					Two1 string `json:"two_1"`
					Two2 string `json:"two_2"`
				} `json:"two"`
			}

			data := `[{"one" : { "one_1": "j_1", "one_2": "j_2" }, "two" : { "two_1": "r_1", "two_2": "r_1"}}, {"one" : { "one_1": "j_1", "one_2": "j_2" }, "two" : { "two_1": "r_1", "two_2": "r_1"}}]`

			var lists []list
			if err := json.Unmarshal([]byte(data), &lists); err != nil {
				println(err.Error())
			}

	for _, v := range lists {

		fmt.Printf("%+v", v.One)
		fmt.Printf("%+v", v.Two)
	}


как распарсить так чтобы я мог вывести:

fmt.Printf("%s %s %s, %s", "one_1", "j_1", "two_1", "r_1")

без v.One.One2 и v.Two.Two2
  • Вопрос задан
  • 305 просмотров
Пригласить эксперта
Ответы на вопрос 1
@sciomenihilscire
Если вы хотите иметь доступ к полям вложенной структуры не указывая названия самой вложенной структуры, тогда вам нужно встроить их в итоговую, а не объявлять одно в другом.
type Two struct {
		Two1 string `json:"two_1"`
		Two2 string `json:"two_2"`
	}

	type One struct {
		One1 string `json:"one_1"`
		One2 string `json:"one_2"`
	}

	type list struct {
		One `json:"one"`
		Two `json:"two"`
	}
	
	
	data := `[{"one" : { "one_1": "j_1", "one_2": "j_2" }, "two" : { "two_1": "r_1", "two_2": "r_1"}}, {"one" : { "one_1": "j_1", "one_2": "j_2" }, "two" : { "two_1": "r_1", "two_2": "r_1"}}]`

	var lists []list
	if err := json.Unmarshal([]byte(data), &lists); err != nil {
		println(err.Error())
	}

	for _, v := range lists {
		fmt.Printf("%+v", v.One1)
		fmt.Printf("%+v", v.Two2)
	}


Типа такого
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы