使用Go语言访问JSON数据(gojsonq)
主要是使用第三方的库 gojsonq,来查询JSON数据
例如这样的JSON数据
{ "name":"computers", "description":"List of computer products", "vendor":{ "name":"Star Trek", "email":"[email protected]", "website":"www.example.com", "items":[ { "id":1, "name":"MacBook Pro 13 inch retina", "price":1350 }, { "id":2, "name":"MacBook Pro 15 inch retina", "price":1700 }, { "id":3, "name":"Sony VAIO", "price":1200 }, { "id":4, "name":"Fujitsu", "price":850 }, { "id":5, "name":"HP core i5", "price":850, "key":2300 }, { "id":6, "name":"HP core i7", "price":950 }, { "id":null, "name":"HP core i3 SSD", "price":850 } ], "prices":[ 2400, 2100, 1200, 400.87, 89.90, 150.10 ], "names":[ "John Doe", "Jane Doe", "Tom", "Jerry", "Nicolas", "Abby" ] } }
安装导入 gojsonq
go get github.com/thedevsaddam/gojsonq or go get gopkg.in/thedevsaddam/gojsonq.v1
引入
import "github.com/thedevsaddam/gojsonq" or import "gopkg.in/thedevsaddam/gojsonq.v1"
可以像ORM访问数据库一样,访问JSON数据
简单应用
package main import ( "fmt" "log" "github.com/thedevsaddam/gojsonq" ) func main() { jq := gojsonq.New().File("./sample-data.json") res := jq.Find("vendor.items.[1].name") if jq.Error() != nil { log.Fatal(jq.Error()) } fmt.Println(res) }
输出结果
MacBook Pro 15 inch retina
Example 1
Query select * from vendor.items where price > 1200 or id null
使用 gojsonq 的方式查询
func ex1(){ jq := gojsonq.New().File("./sample-data.json") res := jq.From("vendor.items").Where("price", ">", 1200).OrWhere("id", "=", nil).Get() fmt.Println(res) }
输出结果
[map[price:1350 id:1 name:MacBook Pro 13 inch retina] map[id:2 name:MacBook Pro 15 inch retina price:1700] map[id:<nil> name:HP core i3 SSD price:850]]
Example 2
Query select name,price from vendor.items where price > 1200 or id null
使用 gojsonq 的方式查询
func ex2() { jq := gojsonq.New().File("./sample-data.json") res := jq.From("vendor.items").Where("price", ">", 1200).OrWhere("id", "=", nil). Only("name", "price") fmt.Println(res) }
输出结果
[map[name:MacBook Pro 13 inch retina price:1350] map[name:MacBook Pro 15 inch retina price:1700] map[name:HP core i3 SSD price:850]]
Example 3
Query select sum(price) from vendor.items where price > 1200 or id null
使用 gojsonq 的方式查询
func ex3() { jq := gojsonq.New().File("./sample-data.json") res := jq.From("vendor.items").Where("price", ">", 1200).OrWhere("id", "=", nil).Sum("price") fmt.Println(res) }
输出结果
3900
Example 4
Query select price from vendor.items where price > 1200
使用 gojsonq 的方式查询
func ex4() { jq := gojsonq.New().File("./sample-data.json") res := jq.From("vendor.items").Where("price", ">", 1200).Pluck("price") fmt.Println(res) }
输出结果
[1350 1700]
Example 5
Query select * from vendor.items order by price
使用 gojsonq 的方式查询
func ex5() { jq := gojsonq.New().File("./sample-data.json") res := jq.From("vendor.items").SortBy("price").Get() fmt.Println(res) }
输出结果
[map[id:<nil> name:HP core i3 SSD price:850] map[id:4 name:Fujitsu price:850] map[price:850 key:2300 id:5 name:HP core i5] map[id:6 name:HP core i7 price:950] map[name:Sony VAIO price:1200 id:3] map[id:1 name:MacBook Pro 13 inch retina price:1350] map[price:1700 id:2 name:MacBook Pro 15 inch retina]]
Example 6
处理相关的错误信息
func ex6() { jq := gojsonq.New().File("./sample-data.txt") err := jq.Error() if err != nil { log.Fatalln(err) } }
输出结果
2018/09/27 11:20:42 gojsonq: open ./sample-data.txt: The system cannot find the file specified.
Example 7
如这样的JSON数据
{ "users":[ { "id":1, "name":{ "first":"John", "last":"Ramboo" } }, { "id":2, "name":{ "first":"Ethan", "last":"Hunt" } }, { "id":3, "name":{ "first":"John", "last":"Doe" } } ] }
实现这样的查询 select * from users where name.first=John
使用 gojsonq 的方式查询
func ex7() { jq := gojsonq.New().File("./data.json") res := jq.From("users").WhereEqual("name.first", "John").Get() fmt.Println(res) }
输出结果
[map[id:1 name:map[first:John last:Ramboo]] map[id:3 name:map[first:John last:Doe]]]
相关推荐
yangkang 2020-11-09
lbyd0 2020-11-17
sushuanglei 2020-11-12
85477104 2020-11-17
KANSYOUKYOU 2020-11-16
wushengyong 2020-10-28
lizhengjava 2020-11-13
星月情缘 2020-11-13
huangxiaoyun00 2020-11-13
luyong0 2020-11-08
腾讯soso团队 2020-11-06
Apsaravod 2020-11-05
PeterChangyb 2020-11-05
gaobudong 2020-11-04
wwwjun 2020-11-02
gyunwh 2020-11-02
EchoYY 2020-10-31
dingyahui 2020-10-30