go语言gabs库的使用
1 import "fmt" 2 import "github.com/Jeffail/gabs" 3 4 //1、Search + path 使用方法 5 func main() { 6 jObj, _ := gabs.ParseJSON([]byte( 7 ` 8 { 9 "info": { 10 "name": { 11 "first": "lee", 12 "last": "darjun" 13 }, 14 "age": 18, 15 "hobbies": [ 16 "game", 17 "programming" 18 ] 19 } 20 } 21 `)) 22 //如果传入的路径有误或路径下无数据,则Search/Path方法返回的gabs.Container对象内部数据为nil,即Data()方法返回nil 23 fmt.Println("first name: ", jObj.Search("info", "name", "first").Data()) 24 fmt.Println("second name: ", jObj.Path("info.name.last").Data()) 25 fmt.Println("one hobby: ", jObj.Path("info.hobbies").Index(1).Data()) 26 }
1 import "fmt" 2 import "github.com/Jeffail/gabs" 3 4 //2、S——递归查询 5 func main() { 6 jObj, _ := gabs.ParseJSON([]byte( 7 ` 8 { 9 "user": { 10 "name": "dj", 11 "age": 18, 12 "members": [{ 13 "name": "hjw", 14 "age": 20, 15 "relation": "spouse" 16 }, 17 { 18 "name": "lizi", 19 "age": 3, 20 "relation": "son" 21 } 22 ] 23 } 24 } 25 `)) 26 27 fmt.Println("member names: ", jObj.S("user", "members", "name").Data()) 28 fmt.Println("member ages: ", jObj.S("user", "members", "age").Data()) 29 fmt.Println("member relations: ", jObj.S("user", "members", "relation").Data()) 30 fmt.Println("spouse name: ", jObj.S("user", "members").Index(0).S("name").Data()) 31 }
1 import "fmt" 2 import "github.com/Jeffail/gabs" 3 4 //3、 5 //3.1:Children():返回所有数组元素的切片,如果在对象上调用该方法,Children()将以不确定顺序返回对象所有的值的切片; 6 //3.2:ChildrenMap():返回对象的键和值。 7 func main() { 8 jObj, _ := gabs.ParseJSON([]byte( 9 ` 10 { 11 "user": { 12 "name": "dj", 13 "age": 18, 14 "members": [{ 15 "name": "hjw", 16 "age": 20, 17 "relation": "spouse" 18 }, 19 { 20 "name": "lizi", 21 "age": 3, 22 "relation": "son" 23 } 24 ] 25 } 26 } 27 `)) 28 29 KeyValue,_ := jObj.S("user").ChildrenMap() 30 for k, v := range KeyValue { 31 fmt.Printf("key: %v, value: %v\n", k, v) 32 } 33 34 fmt.Println() 35 36 Value,_ := jObj.S("user", "members").Children() 37 for i, v := range Value { 38 fmt.Printf("member %d: %v\n", i+1, v) 39 } 40 }
1 //4 2 //4.1:Exists(hierarchy ...string); 3 //4.2:ExistsP(path string):方法名以P结尾,表示接受以.分隔的路径。 4 func main() { 5 jObj, _ := gabs.ParseJSON([]byte( 6 ` 7 { 8 "user": { 9 "name": "dj", 10 "age": 18 11 } 12 } 13 `)) 14 fmt.Printf("has name? %t\n", jObj.Exists("user", "name")) 15 fmt.Printf("has age? %t\n", jObj.ExistsP("user.age")) 16 fmt.Printf("has job? %t\n", jObj.Exists("user", "job")) 17 }
1 //5、 2 //5.1:获取数组大小:ArrayCount/ArrayCountP,不加后缀的方法接受可变参数作为路径,以P为后缀的方法需要传入.分隔的路径; 3 //5.2:获取数组某个索引的元素:ArrayElement/ArrayElementP。 4 func main() { 5 jObj, _ := gabs.ParseJSON([]byte( 6 ` 7 { 8 "user": { 9 "name": "dj", 10 "age": 18, 11 "members": [{ 12 "name": "hjw", 13 "age": 20, 14 "relation": "spouse" 15 }, 16 { 17 "name": "lizi", 18 "age": 3, 19 "relation": "son" 20 } 21 ], 22 "hobbies": ["game", "programming"] 23 } 24 } 25 `)) 26 27 cnt, _ := jObj.ArrayCount("user", "members") 28 fmt.Println("member count:", cnt) 29 cnt, _ = jObj.ArrayCount("user", "hobbies") 30 fmt.Println("hobby count:", cnt) 31 32 ele, _ := jObj.ArrayElement(0, "user", "members") 33 fmt.Println("first member:", ele) 34 ele, _ = jObj.ArrayElement(1, "user", "hobbies") 35 fmt.Println("second hobby:", ele) 36 }
1 //6、 2 //6.1:Set(value interface{}, hierarchy ...string):将路径各个部分作为可变参数传入即可; 3 //6.2:SetP(value interface{}, path string):路径各个部分以点.分隔; 4 func main() { 5 gObj := gabs.New() 6 7 gObj.Set("lee", "info", "name", "first") 8 gObj.SetP("darjun", "info.name.last") 9 gObj.SetP(18, "info.age") 10 11 fmt.Println(gObj.StringIndent("", " ")) 12 }
1 //7、 2 //7.1:通过Array/ArrayP分别在路径user.hobbies和user.bugs下创建数组, 3 //7.2:然后调用ArrayAppend/ArrayAppendP向这两个数组中添加元素 4 func main() { 5 gObj := gabs.New() 6 7 arrObj1, _ := gObj.Array("user", "hobbies") 8 fmt.Println(arrObj1.String()) 9 10 arrObj2, _ := gObj.ArrayP("user.bugs") 11 fmt.Println(arrObj2.String()) 12 13 gObj.ArrayAppend("game", "user", "hobbies") 14 gObj.ArrayAppend("programming", "user", "hobbies") 15 16 gObj.ArrayAppendP("crash", "user.bugs") 17 gObj.ArrayAppendP("panic", "user.bugs") 18 fmt.Println(gObj.StringIndent("", " ")) 19 }
1 //8、对象删除使用Delete/DeleteP这组方法 2 func main() { 3 jObj, _ := gabs.ParseJSON([]byte( 4 ` 5 { 6 "info": { 7 "age": 18, 8 "name": { 9 "first": "lee", 10 "last": "darjun" 11 } 12 } 13 } 14 `)) 15 fmt.Println(jObj.StringIndent("", " ")) 16 17 jObj.Delete("info", "name") 18 fmt.Println(jObj.StringIndent("", " ")) 19 20 jObj.Delete("info") 21 fmt.Println(jObj.StringIndent("", " ")) 22 }
1 //9、删除某个索引的数组元素,使用ArrayRemove/ArrayRemoveP方法 2 func main() { 3 jObj, _ := gabs.ParseJSON([]byte( 4 ` 5 { 6 "user": { 7 "bugs": ["crash", "panic"], 8 "hobbies": ["game", "programming"] 9 } 10 } 11 `)) 12 13 jObj.ArrayRemove(0, "user", "bugs") 14 fmt.Println(jObj.StringIndent("", " ")) 15 fmt.Println() 16 jObj.ArrayRemoveP(1, "user.hobbies") 17 fmt.Println(jObj.StringIndent("", " ")) 18 }
1 //10、我们可以将两个gabs.Container合并成一个。如果同一个路径下有相同的键: 2 //10.1、如果两者都是对象类型,则对二者进行合并操作; 3 //10.2、如果两者都是数组类型,则将后者中所有元素追加到前一个数组中; 4 //10.3、其中一个为数组,合并之后另一个同名键的值将会作为元素添加到数组中。 5 func main() { 6 obj1, _ := gabs.ParseJSON([]byte(`{"user":{"name":"dj"}}`)) 7 obj2, _ := gabs.ParseJSON([]byte(`{"user":{"age":18}}`)) 8 obj1.Merge(obj2) 9 fmt.Println(obj1.StringIndent("", " ")) 10 11 arr1, _ := gabs.ParseJSON([]byte(`{"user": {"hobbies": ["game"]}}`)) 12 arr2, _ := gabs.ParseJSON([]byte(`{"user": {"hobbies": ["programming"]}}`)) 13 arr1.Merge(arr2) 14 fmt.Println(arr1.StringIndent("", " ")) 15 16 obj3, _ := gabs.ParseJSON([]byte(`{"user":{"name":"dj", "hobbies": "game"}}`)) 17 arr3, _ := gabs.ParseJSON([]byte(`{"user": {"hobbies": ["programming"]}}`)) 18 obj3.Merge(arr3) 19 fmt.Println(obj3.StringIndent("", " ")) 20 21 obj4, _ := gabs.ParseJSON([]byte(`{"user":{"name":"dj", "hobbies": "game"}}`)) 22 arr4, _ := gabs.ParseJSON([]byte(`{"user": {"hobbies": ["programming"]}}`)) 23 arr4.Merge(obj4) 24 fmt.Println(arr4.StringIndent("", " ")) 25 26 obj5, _ := gabs.ParseJSON([]byte(`{"user":{"name":"dj", "hobbies": {"first": "game"}}}`)) 27 arr5, _ := gabs.ParseJSON([]byte(`{"user": {"hobbies": ["programming"]}}`)) 28 obj5.Merge(arr5) 29 fmt.Println(obj5.StringIndent("", " ")) 30 }
Mamba never out

浙公网安备 33010602011771号