0

In golang I have two dimensional slice of pointers to struct, as shown in code below.

type point struct {
    x int
    y int
}

type cell struct {
    point   point
    visited bool
    walls   walls
}

type walls struct {
    n bool
    e bool
    s bool
    w bool
}

type maze struct {
    cells         [][]*cell
    solutionStack Stack
}

I would like to serialize cells slice into JSON. But as all the elements are pointers calling encode will give empty JSON. What would be the best way to serialize this slice.

One solution that comes to my mid is to create a local copy of this 2D slice ad replace all pointers with actual struct. It'll work but it is no

nik
  • 8,387
  • 13
  • 36
  • 44

1 Answers1

3

I'm not sure if I'm answering your question because the built in JSON package will do the reflection of the pointers automatically. It should "just work". I did notice that you are not exporting the properties in your struct, maybe that is the issue you have? When using reflection, you cannot inspect unexported values.

http://play.golang.org/p/zTuMLBgGWk

package main

import (
    "encoding/json"
    "fmt"
)

type point struct {
    X int
    Y int
}

type cell struct {
    Point   point
    Visited bool
    Walls   walls
}

type walls struct {
    N bool
    E bool
    S bool
    W bool
}

type maze struct {
    Cells [][]*cell
}

func main() {
    m := maze{}

    var row1 []*cell
    var row2 []*cell

    row1 = append(row1, &cell{
        Point: point{1, 2},
        Walls: walls{N: true},
    })
    row2 = append(row2, &cell{
        Point: point{3, 4},
        Walls: walls{E: true},
    })
    m.Cells = append(m.Cells, row1, row2)

    mazeJson, _ := json.MarshalIndent(m, "", "  ")
    fmt.Println(string(mazeJson))
}
Buddy
  • 6,603
  • 1
  • 21
  • 16