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 CST仿真别人的模型结果仿真结果S参数完全不对
  • ¥15 误删注册表文件致win10无法开启
  • ¥15 请问在阿里云服务器中怎么利用数据库制作网站
  • ¥60 ESP32怎么烧录自启动程序
  • ¥50 html2canvas超出滚动条不显示
  • ¥15 java业务性能问题求解(sql,业务设计相关)
  • ¥15 52810 尾椎c三个a 写蓝牙地址
  • ¥15 elmos524.33 eeprom的读写问题
  • ¥15 用ADS设计一款的射频功率放大器
  • ¥15 怎么求交点连线的理论解?