Skip to content

Using native JSON parsing to realize a slim JSON decoder

shaban edited this page Jan 4, 2018 · 5 revisions

Using native JSON parsing to realize a slim JSON decoder

Sometimes it is undesirable to use the stdlib JSON library especially if your use case necessitates a small filesize.

This small example is meant to highlight some of the advanced features of gopherjs.

Use Cases

Data Store

By writing a small wrapper around the parsed JSON data it is possible to write a convenient data store built around JSON received from a REST server.

Using Structs mapping your application data front and server side.

By using json:"property" struct tags you can conveniently use the stdlib json library serverside and then reuse your structs clientside with the `js:"property" struct tag. Of course it is also possible to use sql struct tags if that is where your data server side comes from.

package main

import "github.com/gopherjs/gopherjs/js"

const json = `{"menu": {
  "id": "file",
  "value": "File",
  "popup": {
    "menuitem": [
      {"value": "New", "href": "/new"},
      {"value": "Open", "href": "/open"},
      {"value": "Close", "href": "/close"}
    ]
  }
}}`

type MenuItem struct {
	raw   *js.Object
	Value string `js:"value"`
	Href  string `js:"href"`
}

type Popup struct {
	raw       *js.Object
	MenuItems []*MenuItem `js:"menuitem"`
}

type Menu struct {
	raw   *js.Object
	ID    string `js:"id"`
	Value string `js:"value"`
	Popup *Popup `js:"popup"`
}

func ParseJSON(responseText string) *js.Object {
	return js.Global.Get("JSON").Call("parse", responseText)
}

func main() {
	obj := ParseJSON(json)
	if obj == nil {
		println("Oops soemthing went wrong")
		return
	}

	menuJS := obj.Get("menu")
	if menuJS == nil {
		println("Oops no menu")
		return
	}
	m := &Menu{raw: menuJS}
	println(m.Popup.MenuItems[1].Value)
}
Clone this wiki locally
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy