There is no such distinction in json as a float vs. an int; they are just
numbers. This is essentially a consequence of the javascript underpinnings
of json.

Thomas

On Thu, Mar 2, 2017 at 2:29 AM Basile Starynkevitch <
bas...@starynkevitch.net> wrote:

> Hello All,
>
> This could be related to issue #6384
> <https://github.com/golang/go/issues/6384>
>
> I want to JSON encode a float64 point number always as a JSON float, so
> 1.0 should be encoded as 1.0 not as 1 because at decoding time I want to
> distinguish them.
> Conceptually, I am persisting in JSON format something which is somehow
> close to some AST, or even to S-expressions (see below for details). So I
> want a float 1.0 to be different of the integer 1.
>
> If you are curious, my exact code is commit 096ec00f53011b2a1b05ce
> <https://github.com/bstarynk/monimelt/commit/096ec00f53011b2a1b05ceb8d14d4e65e88285d5>
> on github, and when running go test -v objvalmo with my monimelt project
> being last in my GOPATH I'm getting as output (amongst many other lines)
>
> json_emit v=-1.000000 of type objvalmo.FloatV
> json_emit buf: -1
>
> and I would like that second line to be at least json_emit buf: -1.0
> because I need to separate objvalmo.FloatV from objvalmo.IntV types
>
> I played with the following json/encoding example
> <https://golang.org/pkg/encoding/json/#example_RawMessage_marshal> and
> changed it (by adding some mass being 1.0) to
>
> package main
>
> import (
>     "encoding/json"
>     "fmt"
>     "os"
> )
>
> func main() {
>     h := json.RawMessage(`{"precomputed": true}`)
>
>     c := struct {
>         Header *json.RawMessage `json:"header"`
>         Body   string           `json:"body"`
>         Mass   float64            `json:"mass"`
>     }{Header: &h, Body: "Hello Gophers!", Mass: 1.0}
>
>     b, err := json.MarshalIndent(&c, "", "\t")
>     if err != nil {
>         fmt.Println("error:", err)
>     }
>     os.Stdout.Write(b)
>
> }
>
>
>
>
> and expected the output to contain "mass" : 1.0 but it still gives a line
> with only  "mass": 1 without any decimal point. Is there any way to
> change that and get that decimal point?
>
>
> More generally, I don't understand well how should I use JSON facilities
> in Go. IMHO, there are two approaches: one is using go reflection
> facilities, and claim to be able to serialize most arbitrary values.
> another is not using them at all (and this is what I would prefer) by
> constructing some explicit data in memory mimicking JSON format. FWIW, I
> care a bit about performance.
>
> To explain my issues, let us imagine that I want to serialize (and
> unserialize) in JSON format some s-expressions
> <https://en.wikipedia.org/wiki/S-expression> (or some program of a micro
> Scheme or micro Lisp interpreter), with both lists and vectors as composite
> types, with the additional constraint that some symbols should not be
> serialized (and we'll output the null JSON value for them instead) For
> simplicity assume that we have only alphabetical symbols like xy foo bar
> efg Let us suppose that we want to ignore all symbols starting with a
> vowel  (so we ignore efg here). so (foo 1 #(2 xy)  (bar "ab" efg -1.0
> "cd")) is an example of such s-expr.. It is a list of 4 elements. The
> third element is a vector #(2 xy) of 2 components. The 4th and last
> element is a list (bar "ab" efg -1.0 "cd") of 5 elements whose 3rd
> element is the symbol efg which, since starting with a vowel, should be
> ignored and serialized as null and whose 4th element is the floating
> point -1.0 (not the integer -1). I would like to serialize that S-expr
> value as e.g.
> { "list" : [ { "symb" : "foo" }, 1, { "vect" : [ 2, { "symb" : "xy" } ] },
> { "list" : [ { "symb" : "bar" }, null, -1.0, "cd" ] } ] }
>
>
> Actually, I am not exacty coding a microScheme. I haved shared objects (of
> *ObjectMo type) and values (of ValueMo type) inside objects (every object
> has a map and a slice of values). I want to persist them in JSON inside an
> Sqlite database, but some objects are transient and non-persistent (so I
> would encode them as null). All objects have a *unique* id like
> _0ECuE7b9XhQ_3HvWl3RGhD6
>
> Any advices are welcome. In particular, I am a bit afraid of the
> reflection approach (because I want serialization & deserialization to not
> be too slow, and I really need to master the JSON representation).
>
> --
> You received this message because you are subscribed to the Google Groups
> "golang-nuts" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to golang-nuts+unsubscr...@googlegroups.com.
> For more options, visit https://groups.google.com/d/optout.
>

-- 
You received this message because you are subscribed to the Google Groups 
"golang-nuts" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to golang-nuts+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to