немаршальная карта пользовательских значений

# #go

Вопрос:

Я создал пользовательский тип для карты. Я хотел бы разархивировать ответ json массива на карту. Ключевое значение карты меняется каждый раз при получении ответа. Проблема, с которой я сталкиваюсь, заключается в том, что функция unmarshal неправильно сопоставляется с пользовательскими значениями.

     type id map[string]yp

    type yp struct {
        f1      string              
        f2      int     
    }   

    func main() {
        data := []byte("[{"unique1":{"f1":"1","f2":"2"}},{"unique2":{"f1":"4","f2":"7"}}]")
        var i []id
        json.Unmarshal(data,amp;i)
        fmt.Printf("%v",i)
    }
 

Комментарии:

1. Ваш JSON имеет f2 строковый тип, но ваша структура имеет f2 такой же int ?

Ответ №1:

Поскольку исходным значением для f2 является строка, вам необходимо добавить тег поля:

 package main

import (
   "encoding/json"
   "fmt"
)

var data = []byte(`
[
   {
      "unique1": {"f1": "1", "f2": "2"}
   }, {
      "unique2": {"f1": "4", "f2": "7"}
   }
]
`)

func main() {
   var ids []map[string]struct {
      F1 string              
      F2 int `json:"f2,string"`
   }
   json.Unmarshal(data, amp;ids)
   // [map[unique1:{F1:1 F2:2}] map[unique2:{F1:4 F2:7}]]
   fmt.Printf("% vn", ids)
}