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 PADS Logic 原理图
  • ¥15 PADS Logic 图标
  • ¥15 电脑和power bi环境都是英文如何将日期层次结构转换成英文
  • ¥20 气象站点数据求取中~
  • ¥15 如何获取APP内弹出的网址链接
  • ¥15 wifi 图标不见了 不知道怎么办 上不了网 变成小地球了
  • ¥50 STM32单片机传感器读取错误
  • ¥15 (关键词-阻抗匹配,HFSS,RFID标签天线)
  • ¥15 机器人轨迹规划相关问题
  • ¥15 word样式右侧翻页键消失