在 Golang 中整理这个 JSON

我正在自学如何在 Golang 中使用 JSON 包。很多事情看起来很简单,但是我在解析从 3D 打印机中检索到的一些 JSON 数据时遇到了麻烦。JSON 如下所示:


{

    "tasks": [

        {

            "class": "Task",

            "id": "5fee231a",

            "instances": {

                "28253266": {

                    "class": "StateInstance",

                    "id": "28253266",

                    "progress": 1,

                    "stateType": "Y-EdgeAvoiding"

                },

                "1d774b49": {

                    "class": "StateInstance",

                    "id": "1d774b49",

                    "progress": 1,

                    "stateType": "X-Calibration"

                },

            },

            "stateType": "StartingUp"

        }

    ]

}

(注意:还有一些“实例”,但为了简洁起见我没有包括它们,但它们都遵循这种模式,但具有不同的 stateType)


基本上,打印机有它正在执行的任务(在上面的示例中,该任务的 ID 为5fee231a)以及在其中的子任务(例如 Task 28253266)。


如果我使用此代码:


    var vals interface{}

    err = json.Unmarshal([]byte(myJSON), &vals)


    if err != nil {

        fmt.Println("Error:", err)

    }


    spew.Dump(&vals)

(github.com/davecgh/go-spew用于转储变量),然后我得到一些输出(注意:这不是整个输出,为了简洁起见,它被剪掉了:)):


(*map[string]interface {})(0xc0820068e0)((len=1) {

 (string) (len=5) "tasks": ([]interface {}) (len=1 cap=1) {

  (map[string]interface {}) (len=4) {

   (string) (len=5) "class": (string) (len=4) "Task",

   (string) (len=2) "id": (string) (len=8) "5fee231a",

   (string) (len=9) "instances": (map[string]interface {}) (len=13) {

    (string) (len=8) "bd65d028": (map[string]interface {}) (len=4) {

     (string) (len=5) "class": (string) (len=13) "StateInstance",

     (string) (len=2) "id": (string) (len=8) "bd65d028",

     (string) (len=8) "progress": (float64) 1,

     (string) (len=9) "stateType": (string) (len=17) "CenteringPosition"

    },

    (string) (len=8) "d1e225e7": (map[string]interface {}) (len=4) {

     (string) (len=2) "id": (string) (len=8) "d1e225e7",

     (string) (len=8) "progress": (float64) 1,

     (string) (len=9) "stateType": (string) (len=10) "TargetCold",

     (string) (len=5) "class": (string) (len=13) "StateInstance"

    },


MMMHUHU
浏览 250回答 2
2回答

开满天机

除了 Ainar-G 发布的答案之外,我还发现了这个网站,它根据您粘贴的任何 JSON 为您生成结构。当我从打印机粘贴 JSON 时,生成的代码一团糟,不像上面提供的答案那么紧凑和完整,但是如果你有一些简单的 JSON,你想快速转换为结构,这可能对你有用。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go