簡體   English   中英

Unmarshal json可選元素Golang

[英]Unmarshal json optional element Golang

我得到的數據是這種格式的xlsx行:第1行值1是第一個單元格(A1),第1行值2是第二個單元格(B1)等。任何單元格都可以(但不需要)包含樣式,例如邊框,填充等.Styles將在這個數據中用大括號括起來: [[["row 1 value 1",{"Border":null,"Fill":{"arrFill":{"BgColor":"red"}},"Font":null,"ApplyBorder":null}],"row 1 value 2","row 1 value 3"],["row 2 value 1","row 2 value 2","row 2 value 3"]]

如何解組這些數據以獲得不必要的樣式圖?

操場

您可能需要使用反射包來檢查生成的數組/映射中的數據類型。 它看起來很乏味,但似乎是唯一的出路。 我在下面粘貼了一些快速而又臟的但可運行的代碼來說明相同的內容:

package main

import (
    "encoding/json"
    "fmt"
    "reflect"
)

func parsePrintArray(y interface{}) {
    var dummy []interface{}
    var dummy2 map[string]interface{}
    if reflect.TypeOf(y) == reflect.TypeOf("") {
        fmt.Printf("%s ", y)
        return
    }
    if reflect.TypeOf(y) == reflect.TypeOf(dummy2) {
        x := y.(map[string]interface{})
        for ks, vi := range x {
            fmt.Printf("\ndumping for key %s ", ks)
            if vi != nil {
                parsePrintArray(vi)
            }
        }
        return
    }
    for k, yl := range y.([]interface{}) {
        if reflect.TypeOf(yl) == reflect.TypeOf(dummy) {
            fmt.Println("")
            parsePrintArray(yl.([]interface{}))
        } else if reflect.TypeOf(yl) == reflect.TypeOf("") {
            fmt.Printf("%v: %s ", k, yl.(string))
        } else if reflect.TypeOf(yl) == reflect.TypeOf(dummy2) {
            x := yl.(map[string]interface{})
            for ks, vi := range x {
                fmt.Printf("\ndumping for key %s ", ks)
                if vi != nil {
                    parsePrintArray(vi)
                }
            }
        }
    }
}

func main() {

    x := "[[[\"row 1 value1\",{\"Border\":null,\"Fill\":{\"arrFill\":{\"BgColor\":\"red\"}},\"Font\":null,\"ApplyBorder\":null}],\"row 1 value2\",\"row 1 value 3\"],[\"row 2 value 1\",\"row 2 value 2\",\"row 2 value 3\"]]"

    var y []interface{}
    err := json.Unmarshal([]byte(x), &y)
    if err != nil {
        panic(err)
    }
    parsePrintArray(y)
    fmt.Println("")
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM