duanfan1869 2015-01-22 18:09
浏览 242
已采纳

指向JSON的指针数组

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

  • 写回答

1条回答 默认 最新

  • doulang5323 2015-01-22 18:35
    关注

    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))
    }
    

    展开全部

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
编辑
预览

报告相同问题?

手机看
程序员都在用的中文IT技术交流社区

程序员都在用的中文IT技术交流社区

专业的中文 IT 技术社区,与千万技术人共成长

专业的中文 IT 技术社区,与千万技术人共成长

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

客服 返回
顶部