Question: 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

Answer: 
We can declare variable for mix mapping with integer,string as below.

```
var variable_name = map[string]interface{}{}

```

e.g.

```
var variable_name = map[string]interface{}{
        "name": c.String("name"),
        "age":  c.Int("age"),
}

```
I agree with maerics,

`map[string]interface{}` would be the way to go, if you have to avoid structs.

From your content I assume, that you are dealing with mongodb-queries.  

So maybe the following code helps.

If you are going to query mongodb from go I would recommend the mgo-driver **mgo.v2**.  

It implements a custom type **bson.M** which is the same as mentioned above, but works also for querying the db. 

Beside this, it makes the code more readable.

**Sample:**

```
package main

import (
    "fmt"
    "gopkg.in/mgo.v2/bson"
    "encoding/json"
)

func main() {

    bsonMap := bson.M{
        "age": bson.M{
            "$gt": 22,
            "$lt": 20,
        },
        "location": bson.M{"$eq": "london",},
        "name":     bson.M{"$eq": "fred"},
    }

    bytes, err := json.Marshal(bsonMap)

    if err != nil {
        panic(err)
    }

    fmt.Println(string(bytes))
}

```