Я пытаюсь разобрать файл узла package.json в golang, и я получил следующую структуру:демаршалинга объект JSON верхнего уровня в golang
type packageJson struct {
scripts map[string]interface{} `json:"scripts"`
dependencies map[string]interface{} `json:"dependencies"`
devDependencies map[string]interface{} `json:"devDependencies"`
}
...
var content packageJson
if err := json.Unmarshal(b, &content); err != nil {
return err
}
Когда я анализирую файл пакета, однако структура не заполняется (хотя и не получается ошибка). Я подозреваю, что это потому, что контент является самим объектом (то есть: { "scripts":"...", ... }
), а метод Unmarshal хочет преобразовать его в map[string]interface{}
. Любые предложения, как обойти эту «проблему»? Я попытался создать структуру-оболочку и использовать jpath
, но безрезультатно. Благодаря!
Примечание: Я мог бы сделать это
var content map[string]interface{}
...
if val, ok := content["scripts"]; !ok { ... }
, но я хотел бы избежать, если это возможно.
Я думал, что видимость не имеет значения, но я думаю, это потому, что Unmarshal принимает указатель и выходит за рамки. Он работает сейчас! Благодарю. – morcmarc
Это связано с тем, что не экспортируемые поля не могут быть доступны никакими другими пакетами даже с отражением. – Matt
Видимость связана с тем, что unmarshaller использует отражение и просто не сможет получить доступ к закрытым полям. Здесь обсуждается этот вопрос: http://stackoverflow.com/questions/11126793/golang-json-and-dealing-with-unexported-fields –