Разбор вложенного JSON с go - PullRequest
0 голосов
/ 06 мая 2018

Я пытаюсь проанализировать вложенный JSON на GO,

JSON выглядит так:

{
    "id"   : 12345656,
    "date" : "2018-05-02-18-16-17",
    "lists" : [
     {
          "empoyee_id": "12343",
          "name": "User1"

      },
      {
          "contractor_id" : "12343",
          "name":  "User1"
       }, 
       {
          "contractor_id" : "12343",
          "name":  "User1"
       }
    ]
}

Моя структура

type Result struct {
  id    int64    `json:"id"`
  Date  string   `json:"date"`
  Lists []string `json:"lists"`
}

Я пытаюсь получить к нему доступ, используя следующее:

var result Result
json.Unmarshal(contents, &result)

Как изменить вышеприведенное для доступа к полям employee_id или contractor_id?

1 Ответ

0 голосов
/ 07 мая 2018

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

package main

import (
    "fmt"
    "encoding/json"
)

var contents string = `{
    "id"   : 12345656,
    "date" : "2018-05-02-18-16-17",
    "lists" : [
     {
          "empoyee_id": "12343",
          "name": "User1"

      },
      {
          "contractor_id" : "12343",
          "name":  "User1"
       }, 
       {
          "contractor_id" : "12343",
          "name":  "User1"
       }
    ]
}`

type Result struct {
    ID    int64         `json:"id"`
    Date  string       `json:"date"`
    Lists []Contractor `json:"lists"`
}

type Contractor struct {
    ContractorID string `json:"contractor_id"`
    EmployeeID   string `json:"employee_id"`
    Name         string `json:"name"`
}

func main() {
    var result Result
    err := json.Unmarshal([]byte(contents), &result)
    if err != nil {
        panic(err)
    }
    fmt.Println(result)
}

Исполняемые:

https://play.golang.org/p/7dYArgz1V8y

Если вам просто нужно одно поле идентификатора для вложенного объекта, вам нужно будет выполнить пользовательскую функцию демаршалирования результата, чтобы определить, какой идентификатор присутствует.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...