【问题标题】:How can I type an array of mixed types in golang?如何在 golang 中键入混合类型的数组?
【发布时间】:2019-02-11 00:12:40
【问题描述】:

我正在写一个需要转换为 JSON 的地图,其中一个必需的值是一个混合类型的数组。

var models = map[string]interface{} {
   ...
   "req": [[0, "all", [0]]],
   ...
}

有没有办法给这个嵌套数组分配一个类型?或者有没有比地图更好的方法来创建这个 JSON?

编辑:我想越来越近了,不确定如何处理嵌套数组

var models = map[string]interface{} {
       ...
       "req": []interface{}{[[0, "all", [0]]]},
       ...
    }

编辑:我要创建的整个 JSON,我只是停留在“req”键上,但因为它是被请求的:

{
    1388596687391: {
      veArs: [],
      name: 'Basic-f15d2',
      tags: ['Tag'],
      did: 1435588830424,
      usn: -1,
      req: [[0, 'all', [0]]],
      flds: [
        {
          name: 'Front',
          media: [],
          sticky: false,
          rtl: false,
          ord: 0,
          font: 'Arial',
          size: 20
        },
        {
          name: 'Back',
          media: [],
          sticky: false,
          rtl: false,
          ord: 1,
          font: 'Arial',
          size: 20
        }
      ],
      sortf: 0,
      latexPre:
        '\\documentclass[12pt]{article}\n\\special{papersize=3in,5in}\n\\usepackage[utf8]{inputenc}\n\\usepackage{amssymb,amsmath}\n\\pagestyle{empty}\n\\setlength{\\parindent}{0in}\n\\begin{document}\n',
      tmpls: [
        {
          name: 'Card 1',
          qfmt: questionFormat,
          did: null,
          bafmt: '',
          afmt: answerFormat,
          ord: 0,
          bqfmt: ''
        }
      ],
      latexPost: '\\end{document}',
      type: 0,
      id: 1388596687391,
      css,
      mod: 1435645658
    }
  }

【问题讨论】:

  • 请贴出样图和你要创建的json格式。添加更多代码以重新创建问题。
  • 已添加,但我认为我只是停留在嵌套数组上。谢谢!
  • 您是如何获取这些数据并将其保存到地图类型的变量中的。显示你得到的可变数据。
  • 它不是来自 API 或外部任何地方,我需要手动创建它以作为另一个库的配置传入。

标签: json go types interface hashmap


【解决方案1】:

这是一个基本的例子:

package main

import "fmt"

func main() {
  primes := [6]int {2, 3, 5, 7, 11, 13}
  mixed := []interface{} {"foo", 10, primes }
  //fmt.Println(mixed...)

  test := map[string]interface{} {
    "omar":mixed,
  }

  fmt.Println(test["omar"])
}

【讨论】:

  • 啊,所以一种方法是预先定义嵌套类型。说得通!谢谢!
  • 这个答案是正确的,但没有试图解释为什么它是正确的。
【解决方案2】:

切片/数组/映射文字都以相同的方式工作,as explained in the tour - 每个值文字只需要在包含类型尚未指定类型时指定的类型(即接口类型的映射/切片/数组),并且每个值列表都包含在大括号 {} 中,而不是像 JSON 中的括号 []

   "req": []interface{}{[]interface{}{[]interface{}{0, "all", []interface{}{0}}}},

注意最后一个元素也可以写成[]int{0}

【讨论】:

  • 感谢您的解释!内联方法更接近我的意思。我认为这是最好的答案,谢谢!
猜你喜欢
  • 2021-10-29
  • 2014-04-28
  • 1970-01-01
  • 2019-12-22
  • 2018-05-12
  • 1970-01-01
  • 2018-08-27
  • 2021-12-15
  • 1970-01-01
相关资源
最近更新 更多