主要是使用第三方的库gojsonq,来查询JSON数据

例如这样的JSON数据

{

名称' : '计算机,

描述' : '计算机产品清单,

供应商' :{

名称' : '星际迷航,

电子邮件:'info@example.com ',

网站:'www.example.com ',

项目:[

{

id':1,

名称:'MacBook Pro 13英寸视网膜,

价格' :1350

},

{

id':2,

名称:'MacBook Pro 15英寸视网膜,

价格' :1700

},

{

id':3,

名称' : '索尼VAIO ',

价格' :1200

},

{

id':4,

名称' : '富士通,

价格' :850

},

{

id':5,

名称' : '惠普酷睿i5’,

价格' :850,

密钥' :2300

},

{

id':6,

名称' : '惠普酷睿i7 ',

价格' :950

},

{

id':null,

名称' : '惠普酷睿i3固态硬盘,

价格' :850

}

],

价格:[

2400,

2100,

1200,

400.87,

89.90,

150.10

],

姓名' :[

'悦耳的电脑Doe ',

无名氏,

汤姆,

杰瑞,

尼古拉斯,

艾比

]

}

}

安装导入gojsonq

去找github.com/thedevsaddam/gojsonq

或者

去找gopkg.in/thedevsaddam/gojsonq.v1

引入

导入github。com/depvsaddam/gojsonq '

或者

导入gopkg。in/depvsaddam/gojsonq。v1’

可以像ORM访问数据库一样,访问JSON数据

简单应用

包装主体

导入(

fmt '

日志

github。com/depvsaddam/gojsonq '

)

func main(){ 0

jq :=gojsonq .新()。文件('。/sample-data.json ')

第:号决议.查找('供应商。项目[1]).名称)

如果jq .错误()!=零

日志。致命(jq .错误())

}

fmt .Println(res)

}

输出结果

MacBook Pro 15英寸视网膜

例一

查询从供应商处选择*价格为1200或身份证明(identification)为空的项目

使用gojsonq的方式查询

func ex1(){ 0

jq :=gojsonq .新()。文件('。/sample-data.json ')

第:号决议.发件人('供应商.项目')。其中('价格','',1200)。或者这里(' id ','=',nil).Get()

fmt .Println(res)

}

输出结果

[地图[价格:1350 id:1名称:MacBook Pro 13英寸视网膜]地图[id:2名称:MacBook Pro 15英寸视网膜价格:1700]地图[id:nil名称:马力酷睿i3固态硬盘价格3:850]]

例2

查询选择名称、供应商价格。价格为1200或身份证明(identification)为空的项目

使用gojsonq的方式查询

func ex2(){ 0

jq :=gojsonq .新()。文件('。/sample-data.json ')

第:号决议.发件人('供应商.项目')。其中('价格','',1200)。或者这里(' id ','=',nil).

仅('名称','价格)

fmt .Println(res)

}

输出结果

[地图[名称:MacBook Pro 13英寸视网膜价格:1350]地图[名称:MacBook Pro 15英寸视网膜价格:1700]地图[名称:马力酷睿i3固态硬盘价格:850]]

例3

查询从供应商处选择金额(价格)。价格为1200或身份证明(identification)为空的项目

使用gojsonq的方式查询

func ex3(){ 0

jq :=gojsonq .新()。文件('。/sample-data.json ')

第:号决议.发件人('供应商.项目')。其中('价格','',1200)。或者这里(' id ','=',nil).总和("价格")

fmt .Println(res)

}

输出结果

3900

例四

查询从供应商处选择价格。价格为1200的项目

使用gojsonq的方式查询

func ex4(){ 0

jq :=gojsonq .新()。文件('。/sample-data.json ')

第:号决议.发件人('供应商.项目')。其中('价格','',1200)。采摘(价格)

fmt .Println(res)

}

输出结果

[1350 1700]

例5

查询从供应商处选择*。按价格排序的项目

使用gojsonq的方式查询

func ex5(){ 0

jq :=gojsonq .新()。文件('。/sample-data.json ')

第:号决议.发件人('供应商.项目')。SortBy('价格')。Get()

fmt .Println(res)

}

输出结果

[地图[id : nil name : HP酷睿i3固态硬盘价格:850]地图[id :4名称:富士通价格:850]地图[价格:850键:2300 id 3:5名称: HP酷睿i5]地图[id 3:6名称: HP酷睿i7价格3:950]地图[id :950

例6

处理相关的错误信息

func ex6(){ 0

jq :=gojsonq .新()。文件('。/sample-data.txt ')

err :=jq .错误()

如果出错!=零

日志。宿命论

}

}

输出结果

2018/09/27 11:20:42 gojson q : open ./sample-data.txt:系统无法找到指定的文件。

例七

如这样的JSON数据

{

用户:[

{

id':1,

名称' :{

第一个' : '悦耳的电脑,

最后' : '兰博'

}

},

{

id':2,

名称' :{

第一个' : '伊森,

最后' : '亨特'

}

},

{

id':3,

名称' :{

第一个' : '悦耳的电脑,

最后一个:'Doe '

}

}

]

}

实现这样的查询从name.first=悦耳的电脑

使用gojsonq的方式查询

func ex7(){ 0

jq :=gojsonq .新()。文件('。/data.json ')

第:号决议.发件人('用户')。WhereEqual('name.first ','悦耳的电脑').Get()

fmt .Println(res)

}

输出结果

[地图[id:1名称:地图[first:悦耳的电脑最后:兰博]]地图[id:3名称:地图[first:悦耳的电脑last:Doe]]]