编组jSON大注入变为浮动的权力

时间:2015-03-24 19:41:29

标签: json types go marshalling

我有这条数据:

productID, err := products.Insert(map[string]interface{}{
    "Properties": map[string]interface{}{
        strconv.Itoa(propertyNameID): map[string]string{
            "en": "Jeans Jersey",
            "nl": "Broek Jersey",
        },
        strconv.Itoa(propertyColorID): propertyOptionRedID,
    },
    "Type":        productTypeID,
    "Propertyset": propertysetID,
    "Active":      true,
    "EAN13":       "1234567890123"})

所有***ID个变量都属于int类型。可悲的是,当我做一名普通的元帅时:

{  
    "Active":true,
    "EAN13":"1234567890123",
    "Properties":{  
        "2286408386526632249":{  
            "en":"Jeans Jersey",
            "nl":"Broek Jersey"
        },
        "4750062295175300168":7.908474319828591e+18
    },
    "Propertyset":8.882218269088507e+18,
    "Type":7.185126253999425e+18
}

...有些整数被转换为float类型的权力。

Itoa仍然只是一些测试,因为编组器不能执行map[int]interface{}(索引值为整数的列表)。我只是不明白为什么int值会更改为“显示”值,而不是纯值。

更新:我尝试使用map[string]int只有一个条目的“属性”。结果仍然相同:(

1 个答案:

答案 0 :(得分:2)

您可以在json中将int64编组为字符串,以避免使用string标记转换为float64

type T struct {
    Val int64 `json:"val,string"`
}
t := T{Val: math.MaxInt64}
j, _ := json.Marshal(t)
fmt.Println(string(j))
// {"val":"9223372036854775807"}