simple json field access for golang
Go Shell
Switch branches/tags
Nothing to show
Latest commit e874b16 May 11, 2015 @jmoiron jmoiron lots of little lint fixes
Failed to load latest commit information.
.gitignore first commit Sep 11, 2012
LICENSE first commit Sep 11, 2012 Update Aug 31, 2014 first commit Sep 11, 2012
doc.go lots of little lint fixes May 11, 2015
jsonq.go lots of little lint fixes May 11, 2015
jsonq_test.go Add function to get generic interface at jq path Feb 27, 2014


Build Status Godoc license

Simplify your golang json usage by extracting fields or items from arrays and objects with a simple, hierarchical query. API Documentation on

This package is meant to make working with complex feeds a bit more easy. If you have simple feeds you want to model with struct types, check out jflect, which will create struct definitions given a json document.


go get


Given some json data like:

	"foo": 1,
	"bar": 2,
	"test": "Hello, world!",
	"baz": 123.1,
	"array": [
		{"foo": 1},
		{"bar": 2},
		{"baz": 3}
	"subobj": {
		"foo": 1,
		"subarray": [1,2,3],
		"subsubobj": {
			"bar": 2,
			"baz": 3,
			"array": ["hello", "world"]
	"bool": true

Decode it into a map[string]interface{}:

import (

data := map[string]interface{}{}
dec := json.NewDecoder(strings.NewReader(jsonstring))
jq := jsonq.NewQuery(data)

From here, you can query along different keys and indexes:

// data["foo"] -> 1

// data["subobj"]["subarray"][1] -> 2
jq.Int("subobj", "subarray", "1")

// data["subobj"]["subarray"]["array"][0] -> "hello"
jq.String("subobj", "subsubobj", "array", "0")

// data["subobj"] -> map[string]interface{}{"subobj": ...}
obj, err := jq.Object("subobj")

Missing keys, out of bounds indexes, and type failures will return errors. For simplicity, integer keys (ie, {"0": "zero"}) are inaccessible by jsonq as integer strings are assumed to be array indexes.

The Int and Float methods will attempt to parse numbers from string values to ease the use of many real world feeds which deliver numbers as strings.

Suggestions/comments please tweet @jmoiron