arrays - 解码 json 可选元素 Golang

标签 arrays json go

我得到的数据是这种格式的 xlsx 行:第 1 行值 1 是第一个单元格 (A1),第 1 行值 2 是第二个单元格 (B1) 等。任何单元格都可以(但不需要)包含样式,例如边框、填充等。样式将在大括号中,如以下数据所示:[[["row 1 value 1",{"Border":null,"Fill":{"arrFill":{"BgColor":"red"}},"Font":null,"ApplyBorder":null}],"第 1 行值 2","第 1 行值 3"],["第 2 行值 1","第 2 行值 2","第 2 行值 3"]]

如何解码此数据以获得不必要的样式映射?

Playground

最佳答案

您可能需要使用反射包来检查结果数组/映射中的数据类型。这看起来很乏味,但似乎这是唯一的出路。我在下面粘贴了一些快速而肮脏但可运行的代码来说明相同的内容:

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

关于arrays - 解码 json 可选元素 Golang,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39019499/

相关文章:

python - 删除 json 数组转换为元组后出现的逗号

json - Jq没有突出显示Docker检查输出

php - jQuery $.post 不返回 JSON 数据

go - 共享数据库全局处理程序时遇到问题

java - Java 数组质因数分解

php - 我如何在 php 中读取包含适当数组的文本文件?

php - 如果数组包含文本值,则将它们添加到数据库 MYSQL

javascript - 打印 JSON 对象数据时控制台上出现未定义消息

pointers - 在 Golang 中返回文件指针

docker - Docker镜像构建失败,出现 “COPY failed: no source files were specified”