donglun2010 2017-12-07 20:15
浏览 123
已采纳

包含字符串和整数的Golang映射

I am trying to create a JSON string from a map using JSON.Marshal() in golang. However, the int values are being displayed as strings surrounded by double quotes.

My code is outputting:

{ "age":
    {
        "$gt":"22",
        "$lt":"20"
    },
  "location":
    {
        "$eq":"london"
    },
  "name":{
        "$eq":"fred"
    }
}

instead of

{ "age":
    {
        "$gt":22,
        "$lt":20
    },
  "location":
    {
        "$eq":"london"
    },
  "name":{
        "$eq":"fred"
    }
}

I am using:

var output_map = map[string]map[string]string{}

//Populate map here

output_json, err := json.Marshal(output_map)

if err!= nil {
    fmt.Println("Error encoding JSON")
}

fmt.Println(output_json)

My understanding is that JSON.Marshal() will print the integers correctly if they are supplied but my map won't contain integers. I could change my map to map[string]map[string]int{} but then it wouldn't contain the string values for 'name' and 'location'.

The ultimate problem is that I need the map to contain both int and string values. Some sort of map[string]map[string]{}.

How can I achieve this? Thank you in advance.

Harry

  • 写回答

4条回答 默认 最新

  • dongyuan7110 2017-12-07 20:22
    关注

    If you cannot describe your data with a properly typed struct then consider using a map with values of type interface{} (essentially any type):

    output_map := map[string]map[string]interface{}{}
    

    For example:

    output_map := map[string]map[string]interface{}{
      "age": {
        "$gt": 18,
      },
      "location": {
        "eq": "London",
      },
    }
    bytes, err := json.MarshalIndent(&output_map, "", "  ")
    if err != nil {
      panic(err)
    }
    // {
    //   "age": {
    //     "$gt": 18
    //   },
    //   "location": {
    //     "eq": "London"
    //   }
    // }
    

    Of course, using the interface{} type is not a best-practice; however, it's sometimes the only way to accomplish certain things.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

悬赏问题

  • ¥15 微信会员卡接入微信支付商户号收款
  • ¥15 如何获取烟草零售终端数据
  • ¥15 数学建模招标中位数问题
  • ¥15 phython路径名过长报错 不知道什么问题
  • ¥15 深度学习中模型转换该怎么实现
  • ¥15 HLs设计手写数字识别程序编译通不过
  • ¥15 Stata外部命令安装问题求帮助!
  • ¥15 从键盘随机输入A-H中的一串字符串,用七段数码管方法进行绘制。提交代码及运行截图。
  • ¥15 TYPCE母转母,插入认方向
  • ¥15 如何用python向钉钉机器人发送可以放大的图片?