Hacker Newsnew | past | comments | ask | show | jobs | submitlogin

It is no where near 80 lines required to parse JSON.

http://play.golang.org/p/H5yFV6VYaT

There is some boiler plate, since you have a typed system, so you must define your types. Beyond that two lines of Go will parse a JSON blob.

    people := []Person{}
    json.Unmarshal(json, &people)
The article is giving examples of using an Unmarshal interface to convert the JSON code into typed Go objects. Hence more lines of code.

Such as the example of converting the JSON time string into a Time type.

edit: updated the example link



How does this deal with deserializing json arrays? Unless you have reified generics it's impossible. This is a common headache when working with Jackson.


The example linked and described already deals with deserializing json arrays. What trouble exactly are you experiencing?


Not the parent, but my biggest issue with arrays and nested objects is this:

Most JSON arrays come in the form

    {
        "objects": [{"foo": "bar"}, ...]
    }
Instead of `[{"foo": "bar"}, ...]`. So I need to create a temporary struct, it would've been nice to be able to provide a starting point or similar. Like `json.UnmarshalFrom(data, &foos, "objects")` (hmm, this gave me an idea!).

Another example is this:

    type Address struct {
        street string
        city   string
    }
And I want to parse that populate that struct with the data from

    {
        "name": "John Doe",
        "address": {
            "street": "Some street 1",
            "city": "Footown"
        },
        ...
    }
Again I have to use temporary struct.


For deeply nested structures, it'll always be a bit of a hassle. In your toy example, you can use struct literals to get to the guts of the object quickly.

https://play.golang.org/p/VE90fwT0sE


Sorry I actually meant Lists. In Java List<String> is just List (since they aren't reified) at compile time so you have to explicitly deserialize an String[] and then manually throw it into an ArrayList<String>.




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: