高朗中没有Struct的动态JSON解析器

Gabs是一个小型实用程序,用于处理Go中的动态或未知JSON结构。它不需要您知道有效负载的结构(例如,创建结构),并且可以通过提供指向它们的路径来访问字段。它几乎只是一个有用的包装,用于导航由encoding / json包提供的map [string] interface {}对象的层次结构。除了出色之外,它没有任何壮观的东西。

安装

go get github.com/Jeffail/gabs

package main

import (
	"fmt"

	"github.com/Jeffail/gabs"
)

func main() {
	data := []byte(`{
		"employees":{
		   "protected":false,
		   "address":{
			  "street":"22 Saint-Lazare",
			  "postalCode":"75003",
			  "city":"Paris",
			  "countryCode":"FRA",
			  "country":"France"
		   },
		   "employee":[
			  {
				 "id":1,
				 "first_name":"Jeanette",
				 "last_name":"Penddreth"
			  },
			  {
				 "id":2,
				 "firstName":"Giavani",
				 "lastName":"Frediani"
			  }
		   ]
		}
	 }`)

	jsonParsed, err := gabs.ParseJSON(data)
	if err != nil {
		panic(err)
	}

	// 搜索 JSON
	fmt.Println("Get value of Protected:\t", jsonParsed.Path("employees.protected").Data())
	fmt.Println("Get value of Country:\t", jsonParsed.Search("employees", "address", "country").Data())
	fmt.Println("ID of first employee:\t", jsonParsed.Path("employees.employee.0.id").String())
	fmt.Println("Check Country Exists:\t", jsonParsed.Exists("employees", "address", "countryCode"))

	// Iterating address objects
	for key, child := range jsonParsed.Search("employees", "address").ChildrenMap() {
		fmt.Printf("Key=>%v, Value=>%v\n", key, child.Data().(string))
	}

	// Iterating employee array
	for _, child := range jsonParsed.Search("employees", "employee").Children() {
		fmt.Println(child.Data())
	}

	// Use index in your search
	for _, child := range jsonParsed.Search("employees", "employee", "0").Children() {
		fmt.Println(child.Data())
	}
}

运行上面的程序时,您可能会看到以下输出:

Get value of Protected:  false
Get value of Country:    France
ID of first employee:    1
Check Country Exists:    true
Key=>street, Value=>22 Saint-Lazare
Key=>postalCode, Value=>75003
Key=>city, Value=>Paris
Key=>countryCode, Value=>FRA
Key=>country, Value=>France
map[id:1 first_name:Jeanette last_name:Penddreth]
map[id:2 firstName:Giavani lastName:Frediani]
Jeanette
Penddreth
1

您必须阅读的解决方案

Go的简单图像处理包

包装成像提供基本的图像处理功能(调整大小,旋转,裁剪,亮度/对比度调整等)。软件包提供的所有图像处理功能均接受任何实现image.Image接口的图像类型作为输入,并返回* image.NRGBA类型的新图像(32位RGBA颜色,未预乘alpha)。 Source Code

Go Slice Map Filter

一个现代的Go实用程序库,提供了辅助功能。 此辅助函数可以解决常见的问题,例如删除切片中的所有重复项,获取两个集合之间的差异,用值填充数组元素,获取两个集合之间的交集等。消费者尽可能容易和灵活。 Source Code

Golang统计软件包

该软件包提供用于计算数字数据的数学统计量的功能。即使您的数据集太大,也可以使用它。该软件包不能依赖于导入其他模块或软件包或库。您可以获取常用的统计函数,例如平均值,中位数,标准差,方差,相关性,和均值等。 Source Code

Golang数据时间工具包

现在,这是一个非常简单的程序包,它为标准时间程序包提供了方便的包装,并使得在当前时间使用各种日期和时间构造变得容易。 It is hosted on GitHub, along with additional documentation in the README.md file: //github.com/jinzhu/now

最佳组合清单

Go标准库提供了几个可供gopher使用的软件包,以解决他们经常遇到的与编程有关的各种问题。 除了核心程序包,还有一些第三方程序包,对地鼠很有用。而且,大多数这些软件包都是开源的,可以免费使用。因此,让我们检查一些重要的第三方Go软件包,这些软件包对于gopher从事各种项目很有用。该列表包含用于验证,JSON / XML / HTML解析,统计计算等的流行Go软件包。还为其中一些提供了简单的示例。

Golang Chart Package

打包图表是一个非常简单的golang本机图表库,它支持时间序列图和连续线图。 It is hosted on GitHub, along with additional documentation in the README.md file: //github.com/wcharczuk/go-chart

Golang HTML parser

包goquery实现了与jQuery类似的功能,包括可链接的语法,以操纵和查询HTML文档。 它为Go语言带来了类似于jQuery的语法和一组功能。它基于Go的net / html包和CSS Selector库cascadia。在语法上,它尽可能接近jQuery,并在可能的情况下使用相同的方法名称,并且具有温暖而模糊的可链接接口。 It is hosted on GitHub, along with additional documentation in the README.md file: //github.com/puerkitobio/goquery

进行结构和现场验证示例

包验证器基于标签对结构和各个字段实现值验证。通过使用验证标签或自定义验证程序,它具有以下用于跨字段和跨结构验证的独特功能。切片,阵列和地图潜水,这可以验证多维字段的任何或所有级别。能够深入了解映射键和值以进行验证。 Source Code

CommonRegex 高朗软件包以及示例

这是经常使用的正则表达式的集合。它提供了这些简单功能来获取与特定模式相对应的匹配字符串。这有助于查找字符串中的所有时间,日期,链接,电话号码,电子邮件,ip地址,价格,十六进制颜色和信用卡号。包开发人员做了艰苦的工作,所以我们不必这样做。 Source Code

Golang动态XML解析器

xmlquery是用于XML文档的XPath查询包,可让您通过XPath表达式从XML文档提取数据或求值。 It is hosted on GitHub, along with additional documentation in the README.md file: //github.com/antchfx/xmlquery