#json #go
#json #Вперед
Вопрос:
У меня есть интересный файл JSON, который немного вложен, и я не смог найти хороший пример того, как его правильно разобрать. Может кто-нибудь, пожалуйста, взглянуть ниже, чтобы увидеть, верны ли мои структуры, я могу анализировать элементы корневого уровня, но чем глубже я пытаюсь зайти, тем больше я теряюсь. Пожалуйста, посмотрите мой код ниже:
Файл JSON, который я пытаюсь проанализировать, находится в отдельном файле:
{
"pushed": 090909099,
"job_id": 17422,
"processed": 159898989,
"unit_report": [
{
"meta": {
"file": {
"file_type": "Binary",
"file_name": "Bob.txt",
"file_path": "/usr/local/Bob.txt",
"size": 4563,
"entropy": 3.877,
"hashes": [
{
"name": "Uniq34",
"value": "02904234234234234243"
},
{
"name": "sha1",
"value": "23423423423423423423423"
},
{
"name": "sha256",
"value": "523412423424234234234"
}
]
},
И моя настройка структуры приведена ниже в моем файле Go ниже:
package main
import (
"encoding/json"
"fmt"
"io/ioutil"
"os"
)
// Report struct
type Report struct {
Pushed int `json:"pushed"`
JobID int `json:"job_id"`
Processed int `json:"processed"`
SetReport []struct {
Meta struct {
File struct {
FileType string `json:"file_type"`
FileName string `json:"file_name"`
FilePath string `json:"file_path"`
Size int `json:"size"`
Entropy int `json:"entropy"`
}
}
}
}
Комментарии:
1. Избавление от анонимных структур облегчит рассуждения об этом. Вам не хватает тегов json для полей типа struct.
2. Просто используйте mholt.github.io/json-to-go
Ответ №1:
Проблема с вашим кодом заключается в том, что вы хотите, чтобы unit_report
в ваших json
данных сопоставлялись с SetReport
в Go
struct.
Для этого вы либо устанавливаете json:"unit_report
в свое SetReport
поле, либо переименовываете SetReport
в UnitReport
.
Либо:
Processed int `json:"processed"`
SetReport []struct {
...
} `json:"unit_report` // See the changes here
или:
Processed int `json:"processed"`
UnitReport []struct { // See the changes here
...
}