{"id":44707689,"url":"https://github.com/tkeel-io/collectjs","last_synced_at":"2026-02-15T11:11:55.598Z","repository":{"id":43700852,"uuid":"430924429","full_name":"tkeel-io/collectjs","owner":"tkeel-io","description":"Convenient and dependency free wrapper for working with json arrays and objects.","archived":false,"fork":false,"pushed_at":"2022-02-27T08:29:19.000Z","size":298,"stargazers_count":2,"open_issues_count":1,"forks_count":4,"subscribers_count":2,"default_branch":"master","last_synced_at":"2024-06-21T03:22:09.205Z","etag":null,"topics":["collection","golang","json","laravel-collections","nested-arrays","nested-objects"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/tkeel-io.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2021-11-23T01:47:59.000Z","updated_at":"2024-06-21T03:22:09.206Z","dependencies_parsed_at":"2022-08-30T07:51:29.726Z","dependency_job_id":null,"html_url":"https://github.com/tkeel-io/collectjs","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/tkeel-io/collectjs","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tkeel-io%2Fcollectjs","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tkeel-io%2Fcollectjs/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tkeel-io%2Fcollectjs/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tkeel-io%2Fcollectjs/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/tkeel-io","download_url":"https://codeload.github.com/tkeel-io/collectjs/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tkeel-io%2Fcollectjs/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29476300,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-15T10:25:47.032Z","status":"ssl_error","status_checked_at":"2026-02-15T10:25:01.815Z","response_time":118,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["collection","golang","json","laravel-collections","nested-arrays","nested-objects"],"created_at":"2026-02-15T11:11:50.783Z","updated_at":"2026-02-15T11:11:55.587Z","avatar_url":"https://github.com/tkeel-io.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# collectjs\n\nConvenient and dependency free wrapper for working with json arrays and objects in go. Like [collect.js](collect.js.org)\n\nYou can transform `json` data format and convert it into a suitable data \nstructure without using `json.Marshal` and `json.Unmarshal`  .\n\n### How to use\n\n```\nimport \t\"github.com/tkeel-io/collectjs\"\n\nvar raw = Byte(`[\n  {\n    \"count\": \"1\",\n    \"product\": \"Chair\",\n    \"manufacturer\": \"IKEA\"\n  },\n  {\n    \"sum\": \"10\",\n    \"product\": \"Desk\",\n    \"manufacturer\": \"IKEA\"\n  },\n  {\n    \"product\": \"Chair\",\n    \"manufacturer\": \"Herman Miller\"\n  }\n]`)\n\nfunc main(){\n    cc := newCollect(raw)\n    fmt.Println(string(cc.MergeBy(\"product\", \"manufacturer\")))\n    // Output:\n\t// {\n    //   \"Chair+IKEA\":{\"count\": \"1\",\"product\": \"Chair\",\"manufacturer\": \"IKEA\"},\n    //   \"Desk+IKEA\":{\"sum\": \"10\",\"product\": \"Desk\",\"manufacturer\": \"IKEA\"},\n    //   \"Chair+Herman Miller\":{\"product\": \"Chair\",\"manufacturer\": \"Herman Miller\"}\n    // }\n\n\tfmt.Println(string(MergeBy(raw, \"product\", \"manufacturer\")))\n    // Output:\n\t// {\n    //   \"Chair+IKEA\":{\"count\": \"1\",\"product\": \"Chair\",\"manufacturer\": \"IKEA\"},\n    //   \"Desk+IKEA\":{\"sum\": \"10\",\"product\": \"Desk\",\"manufacturer\": \"IKEA\"},\n    //   \"Chair+Herman Miller\":{\"product\": \"Chair\",\"manufacturer\": \"Herman Miller\"}\n    // }\n}\n\n```\n\n\n\n- [collectjs](#collectjs)\n    - [How to use](#how-to-use)\n    - [API](#api)\n      - [Get](#get)\n      - [Set](#set)\n      - [Append](#append)\n      - [Del](#del)\n      - [Combine](#combine)\n      - [GroupBy](#groupby)\n      - [MergeBy](#mergeby)\n      - [KeyBy](#keyby)\n      - [Merge](#merge)\n    - [Demo](#demo)\n    - [License](#license)\n\n\n### API\n\nAll available methods\n\n\n\n#### Get\n```\nfunc TestCollect_Get(t *testing.T) {\n\ttests := []struct {\n\t\tname string\n\t\traw  []byte\n\t\tpath string\n\t\twant interface{}\n\t}{\n\t\t{\"1\", raw, \"\", string(raw)},\n\t\t{\"2\", raw, \"cpu\", \"1\"},\n\t\t{\"2.1\", raw, \"mem[0]\", \"\\\"lo0\\\"\"},\n\t\t{\"3\", raw, \"a\", `[{\"v\":0},{\"v\":1},{\"v\":2}]`},\n\t\t{\"4\", raw, \"a[0]\", `{\"v\":0}`},\n\t\t{\"5\", raw, \"a[1]\", `{\"v\":1}`},\n\t\t{\"6\", raw, \"a[2]\", `{\"v\":2}`},\n\t\t{\"7\", raw, \"a[#]\", `3`}, // count\n\t\t{\"8\", raw, \"a[#].v\", `[0,1,2]`},\n\t\t{\"9\", raw, \"b[0].v\", `{\"cv\":1}`},\n\t\t{\"10\", raw, \"b[1].v\", `{\"cv\":2}`},\n\t\t{\"11\", raw, \"b[2].v\", `{\"cv\":3}`},\n\t\t{\"12\", raw, \"b[#].v\", `[{\"cv\":1},{\"cv\":2},{\"cv\":3}]`},\n\t\t{\"13\", raw, \"b[1].v.cv\", `2`},\n\t\t{\"14\", raw, \"b[#].v.cv\", `[1,2,3]`},\n\t\t{\"14\", rawArray, \"[0]\", `{\"v\":{\"cv\":1}}`},\n\t}\n\tfor _, tt := range tests {\n\t\tcc := newCollect(tt.raw)\n\t\tt.Run(tt.name, func(t *testing.T) {\n\t\t\tif got := cc.Get(tt.path); !reflect.DeepEqual(string(got.raw), tt.want) {\n\t\t\t\tt.Errorf(\"Get() = %v, want %v\", string(got.raw), tt.want)\n\t\t\t}\n\t\t})\n\t}\n}\n```\n\n\n#### Set\n```\nfunc TestCollect_Set(t *testing.T) {\n\ttests := []struct {\n\t\tname  string\n\t\tpath  string\n\t\tvalue string\n\t\twant  interface{}\n\t}{\n\t\t{\"2\", \"cpu\", \"2\", `{\"cpu\":2,\"mem\": [\"lo0\", \"eth1\", \"eth2\"],\"a\":[{\"v\":0},{\"v\":1},{\"v\":2}],\"b\":[{\"v\":{\"cv\":1}},{\"v\":{\"cv\":2}},{\"v\":{\"cv\":3}}],\"where\": 10,\"metadata\": {\"name\": \"Light1\", \"price\": 11.05}}`},\n\t\t{\"3\", \"a\", `{\"v\":0}`, `{\"cpu\":1,\"mem\": [\"lo0\", \"eth1\", \"eth2\"],\"a\":{\"v\":0},\"b\":[{\"v\":{\"cv\":1}},{\"v\":{\"cv\":2}},{\"v\":{\"cv\":3}}],\"where\": 10,\"metadata\": {\"name\": \"Light1\", \"price\": 11.05}}`},\n\t\t{\"4\", \"a[0]\", `0`, `{\"cpu\":1,\"mem\": [\"lo0\", \"eth1\", \"eth2\"],\"a\":[0,{\"v\":1},{\"v\":2}],\"b\":[{\"v\":{\"cv\":1}},{\"v\":{\"cv\":2}},{\"v\":{\"cv\":3}}],\"where\": 10,\"metadata\": {\"name\": \"Light1\", \"price\": 11.05}}`},\n\t\t{\"5\", \"a[0].v\", `{\"v\":0}`, `{\"cpu\":1,\"mem\": [\"lo0\", \"eth1\", \"eth2\"],\"a\":[{\"v\":{\"v\":0}},{\"v\":1},{\"v\":2}],\"b\":[{\"v\":{\"cv\":1}},{\"v\":{\"cv\":2}},{\"v\":{\"cv\":3}}],\"where\": 10,\"metadata\": {\"name\": \"Light1\", \"price\": 11.05}}`},\n\t}\n\tfor _, tt := range tests {\n\t\tt.Run(tt.name, func(t *testing.T) {\n\t\t\tcc := newCollect(raw)\n\t\t\tcc.Set(tt.path, []byte(tt.value))\n\t\t\tif got := cc.raw; !reflect.DeepEqual(string(got), tt.want) {\n\t\t\t\tt.Errorf(\"Get() = %v, want %v\", string(got), tt.want)\n\t\t\t}\n\t\t})\n\t}\n}\n```\n\n#### Append\n```\nfunc TestCollect_Append(t *testing.T) {\n\ttests := []struct {\n\t\tname  string\n\t\traw   []byte\n\t\tpath  string\n\t\tvalue string\n\t\twant  interface{}\n\t}{\n\t\t{\"1\", raw, \"cpu\", \"2\", `Unknown value type`},\n\t\t{\"2\", raw, \"mem\", \"2\", `{\"cpu\":1,\"mem\": [\"lo0\", \"eth1\", \"eth2\",2],\"a\":[{\"v\":0},{\"v\":1},{\"v\":2}],\"b\":[{\"v\":{\"cv\":1}},{\"v\":{\"cv\":2}},{\"v\":{\"cv\":3}}],\"where\": 10,\"metadata\": {\"name\": \"Light1\", \"price\": 11.05}}`},\n\t\t{\"3\", raw, \"a\", `{\"v\":11}`, `{\"cpu\":1,\"mem\": [\"lo0\", \"eth1\", \"eth2\"],\"a\":[{\"v\":0},{\"v\":1},{\"v\":2},{\"v\":11}],\"b\":[{\"v\":{\"cv\":1}},{\"v\":{\"cv\":2}},{\"v\":{\"cv\":3}}],\"where\": 10,\"metadata\": {\"name\": \"Light1\", \"price\": 11.05}}`},\n\t\t{\"4\", raw, \"a[0]\", `0`, `Unknown value type`},\n\t\t{\"5\", raw, \"a[0].v\", `{\"v\":0}`, `Unknown value type`},\n\t\t{\"5\", rawEmptyArray, \"\", `{\"v\":0}`, `[{\"v\":0}]`},\n\t}\n\tfor _, tt := range tests {\n\t\tt.Run(tt.name, func(t *testing.T) {\n\t\t\tcc := newCollect(tt.raw)\n\t\t\tcc.Append(tt.path, []byte(tt.value))\n\t\t\tif got := cc.raw; !reflect.DeepEqual(string(got), tt.want) {\n\t\t\t\tt.Errorf(\"Get() = %v, want %v\", string(got), tt.want)\n\t\t\t}\n\t\t})\n\t}\n}\n```\n\n#### Del\n```\nfunc TestCollect_Del(t *testing.T) {\n\ttests := []struct {\n\t\tname string\n\t\tpath []string\n\t\twant interface{}\n\t}{\n\t\t{\"2\", []string{\"cpu\"}, `{\"mem\": [\"lo0\", \"eth1\", \"eth2\"],\"a\":[{\"v\":0},{\"v\":1},{\"v\":2}],\"b\":[{\"v\":{\"cv\":1}},{\"v\":{\"cv\":2}},{\"v\":{\"cv\":3}}],\"where\": 10,\"metadata\": {\"name\": \"Light1\", \"price\": 11.05}}`},\n\t\t{\"3\", []string{\"a\", \"b\", \"cpu\"}, `{\"mem\": [\"lo0\", \"eth1\", \"eth2\"],\"where\": 10,\"metadata\": {\"name\": \"Light1\", \"price\": 11.05}}`},\n\t\t{\"4\", []string{\"a[0]\"}, `{\"cpu\":1,\"mem\": [\"lo0\", \"eth1\", \"eth2\"],\"a\":[{\"v\":1},{\"v\":2}],\"b\":[{\"v\":{\"cv\":1}},{\"v\":{\"cv\":2}},{\"v\":{\"cv\":3}}],\"where\": 10,\"metadata\": {\"name\": \"Light1\", \"price\": 11.05}}`},\n\t\t{\"5\", []string{\"a[0].v\"}, `{\"cpu\":1,\"mem\": [\"lo0\", \"eth1\", \"eth2\"],\"a\":[{},{\"v\":1},{\"v\":2}],\"b\":[{\"v\":{\"cv\":1}},{\"v\":{\"cv\":2}},{\"v\":{\"cv\":3}}],\"where\": 10,\"metadata\": {\"name\": \"Light1\", \"price\": 11.05}}`},\n\t}\n\tfor _, tt := range tests {\n\t\tt.Run(tt.name, func(t *testing.T) {\n\t\t\tcc := newCollect(raw)\n\t\t\tcc.Del(tt.path...)\n\t\t\tif got := cc.raw; !reflect.DeepEqual(string(got), tt.want) {\n\t\t\t\tt.Errorf(\"Get() = %v, want %v\", string(got), tt.want)\n\t\t\t}\n\t\t})\n\t}\n}\n```\n\n#### Combine\n```\nfunc Example_Combine() {\n\tcollection := []byte(`[\"name\", \"number\"]`)\n\tcollection2 := []byte(`[\"Mohamed Salah\", 11]`)\n\tcombine, _ := Combine(collection, collection2)\n\tfmt.Println(string(combine))\n\n\t// Output:\n\t// {\"name\":\"Mohamed Salah\",\"number\":11}\n}\n```\n\n#### GroupBy\n```\nfunc Example_GroupBy() {\n\tret, _ := GroupBy(rawGroup, \"manufacturer\") //node_memory_MemTotal_bytes\n\tfmt.Println(string(ret))\n\n\t// Output:\n\t// {\"IKEA\":[{\"count\": \"1\",\"product\": \"Chair\",\"manufacturer\": \"IKEA\"},{\"sum\": \"10\",\"product\": \"Desk\",\"manufacturer\": \"IKEA\"}],\"Herman Miller\":[{\"product\": \"Chair\",\"manufacturer\": \"Herman Miller\"}]}\n}\n```\n\n#### MergeBy\n```\nfunc Example_MergeBy() {\n\tret, _ := MergeBy(rawGroup, \"product\", \"manufacturer\") //node_memory_MemTotal_bytes\n\tfmt.Println(string(ret))\n\n\t// Output:\n\t// {\"Chair+IKEA\":{\"count\": \"1\",\"product\": \"Chair\",\"manufacturer\": \"IKEA\"},\"Desk+IKEA\":{\"sum\": \"10\",\"product\": \"Desk\",\"manufacturer\": \"IKEA\"},\"Chair+Herman Miller\":{\"product\": \"Chair\",\"manufacturer\": \"Herman Miller\"}}\n}\n```\n\n\n#### KeyBy\n```\nfunc Example_KeyBy() {\n\tret, _ := KeyBy(rawGroup, \"manufacturer\") //node_memory_MemTotal_bytes\n\tfmt.Println(string(ret))\n\n\t// Output:\n\t// {\"IKEA\":{\"sum\": \"10\",\"product\": \"Desk\",\"manufacturer\": \"IKEA\"},\"Herman Miller\":{\"product\": \"Chair\",\"manufacturer\": \"Herman Miller\"}}\n}\n```\n\n#### Merge\n```\nfunc Example_Merge() {\n\tvar rawObject1 = Byte(`{\"id\": 1,\"price\": 29,}`)\n\tvar rawObject2 = Byte(`{\"price\": \"229\",\"discount\": false}`)\n\tret, _ := Merge(rawObject1, rawObject2)\n\tfmt.Println(string(ret))\n\n\t// Output:\n\t// {\"id\": 1,\"price\": \"229\",,\"discount\":false}\n}\n```\n\n\n\n### Demo\n\nYou can receive Prometheus data format and convert it into a suitable data structure without using `json.Marshal` and `json.Unmarshal`  .\n\n\n```\nfunc Example_Demo() {\n\tcollection1 := New(`{\"status\":\"success\",\"data\":{\"resultType\":\"vector\",\"result\":[{\"metric\":{\"__name__\":\"node_memory_MemAvailable_bytes\",\"instance\":\"192.168.14.102:9100\",\"job\":\"linux\"},\"value\":[1620999810.899,\"6519189504\"]},{\"metric\":{\"__name__\":\"node_memory_MemAvailable_bytes\",\"instance\":\"192.168.14.146:9100\",\"job\":\"linux\"},\"value\":[1620999810.899,\"1787977728\"]},{\"metric\":{\"__name__\":\"node_memory_MemAvailable_bytes\",\"instance\":\"192.168.21.163:9100\",\"job\":\"linux\"},\"value\":[1620999810.899,\"5775802368\"]},{\"metric\":{\"__name__\":\"node_memory_MemAvailable_bytes\",\"instance\":\"192.168.21.174:9100\",\"job\":\"linux\"},\"value\":[1620999810.899,\"19626115072\"]},{\"metric\":{\"__name__\":\"node_memory_MemAvailable_bytes\",\"instance\":\"localhost:9100\",\"job\":\"linux\"},\"value\":[1620999810.899,\"3252543488\"]},{\"metric\":{\"__name__\":\"node_memory_MemTotal_bytes\",\"instance\":\"192.168.14.102:9100\",\"job\":\"linux\"},\"value\":[1620999810.899,\"8203091968\"]},{\"metric\":{\"__name__\":\"node_memory_MemTotal_bytes\",\"instance\":\"192.168.14.146:9100\",\"job\":\"linux\"},\"value\":[1620999810.899,\"8203091968\"]},{\"metric\":{\"__name__\":\"node_memory_MemTotal_bytes\",\"instance\":\"192.168.21.163:9100\",\"job\":\"linux\"},\"value\":[1620999810.899,\"8202657792\"]},{\"metric\":{\"__name__\":\"node_memory_MemTotal_bytes\",\"instance\":\"192.168.21.174:9100\",\"job\":\"linux\"},\"value\":[1620999810.899,\"25112969216\"]},{\"metric\":{\"__name__\":\"node_memory_MemTotal_bytes\",\"instance\":\"localhost:9100\",\"job\":\"linux\"},\"value\":[1620999810.899,\"3972988928\"]}]}}`)\n\tresult := collection1.Get(\"data.result\")\n\tresult.Map(func(key []byte, bytes []byte) []byte {\n\t\tval := New(\"{}\")\n\t\tval.Set(\"timestamp\", Get(bytes, \"value[0]\"))\n\t\tval.Set(\"value\", Get(bytes, \"value[1]\"))\n\t\tret := New(\"{}\")\n\t\tret.Set(string(Get(bytes, \"metric.__name__\")), val.raw)\n\t\tret.Set(\"instance\", Get(bytes, \"metric.instance\"))\n\t\treturn ret.raw\n\t})\n\tret, _ := GroupBy(result.raw, \"instance\") //node_memory_MemTotal_bytes\n\n\tmetricValue := func(p1, p2 *Collect) bool {\n\t\treturn bytes.Compare(p1.Get(\"[0]\").raw, p2.Get(\"[0]\").raw) \u003e 0\n\t}\n\n\tnewCollect(ret).SortBy(metricValue)\n\tfmt.Println(string(result.raw))\n\n\t// Output:\n\t// [{\"node_memory_MemAvailable_bytes\":{\"timestamp\":1620999810.899,\"value\":\"6519189504\"},\"instance\":\"192.168.14.102:9100\"},{\"node_memory_MemAvailable_bytes\":{\"timestamp\":1620999810.899,\"value\":\"1787977728\"},\"instance\":\"192.168.14.146:9100\"},{\"node_memory_MemAvailable_bytes\":{\"timestamp\":1620999810.899,\"value\":\"5775802368\"},\"instance\":\"192.168.21.163:9100\"},{\"node_memory_MemAvailable_bytes\":{\"timestamp\":1620999810.899,\"value\":\"19626115072\"},\"instance\":\"192.168.21.174:9100\"},{\"node_memory_MemAvailable_bytes\":{\"timestamp\":1620999810.899,\"value\":\"3252543488\"},\"instance\":\"localhost:9100\"},{\"node_memory_MemTotal_bytes\":{\"timestamp\":1620999810.899,\"value\":\"8203091968\"},\"instance\":\"192.168.14.102:9100\"},{\"node_memory_MemTotal_bytes\":{\"timestamp\":1620999810.899,\"value\":\"8203091968\"},\"instance\":\"192.168.14.146:9100\"},{\"node_memory_MemTotal_bytes\":{\"timestamp\":1620999810.899,\"value\":\"8202657792\"},\"instance\":\"192.168.21.163:9100\"},{\"node_memory_MemTotal_bytes\":{\"timestamp\":1620999810.899,\"value\":\"25112969216\"},\"instance\":\"192.168.21.174:9100\"},{\"node_memory_MemTotal_bytes\":{\"timestamp\":1620999810.899,\"value\":\"3972988928\"},\"instance\":\"localhost:9100\"}]\n}\n\nfunc Example_Demo2() {\n\tcollection1 := New(`{\"status\":\"success\",\"data\":{\"resultType\":\"vector\",\"result\":[{\"metric\":{\"__name__\":\"node_memory_MemAvailable_bytes\",\"instance\":\"192.168.14.102:9100\",\"job\":\"linux\"},\"value\":[1620999810.899,\"1\"]},{\"metric\":{\"__name__\":\"node_memory_MemAvailable_bytes\",\"instance\":\"192.168.14.146:9100\",\"job\":\"linux\"},\"value\":[1620999810.899,\"3\"]},{\"metric\":{\"__name__\":\"node_memory_MemAvailable_bytes\",\"instance\":\"192.168.21.163:9100\",\"job\":\"linux\"},\"value\":[1620999810.899,\"2\"]},{\"metric\":{\"__name__\":\"node_memory_MemAvailable_bytes\",\"instance\":\"192.168.21.174:9100\",\"job\":\"linux\"},\"value\":[1620999810.899,\"19626115072\"]},{\"metric\":{\"__name__\":\"node_memory_MemAvailable_bytes\",\"instance\":\"localhost:9100\",\"job\":\"linux\"},\"value\":[1620999810.899,\"3252543488\"]},{\"metric\":{\"__name__\":\"node_memory_MemTotal_bytes\",\"instance\":\"192.168.14.102:9100\",\"job\":\"linux\"},\"value\":[1620999810.899,\"8203091968\"]},{\"metric\":{\"__name__\":\"node_memory_MemTotal_bytes\",\"instance\":\"192.168.14.146:9100\",\"job\":\"linux\"},\"value\":[1620999810.899,\"8203091968\"]},{\"metric\":{\"__name__\":\"node_memory_MemTotal_bytes\",\"instance\":\"192.168.21.163:9100\",\"job\":\"linux\"},\"value\":[1620999810.899,\"8202657792\"]},{\"metric\":{\"__name__\":\"node_memory_MemTotal_bytes\",\"instance\":\"192.168.21.174:9100\",\"job\":\"linux\"},\"value\":[1620999810.899,\"25112969216\"]},{\"metric\":{\"__name__\":\"node_memory_MemTotal_bytes\",\"instance\":\"localhost:9100\",\"job\":\"linux\"},\"value\":[1620999810.899,\"3972988928\"]}]}}`)\n\tresult := collection1.Get(\"data.result\")\n\tresult.Map(func(key []byte, bytes []byte) []byte {\n\t\tval := New(\"{}\")\n\t\tval.Set(\"timestamp\", Get(bytes, \"value[0]\"))\n\t\tval.Set(\"value\", Get(bytes, \"value[1]\"))\n\t\tret := New(\"{}\")\n\t\tret.Set(string(Get(bytes, \"metric.__name__\")), val.raw)\n\t\tret.Set(\"instance\", Get(bytes, \"metric.instance\"))\n\t\treturn ret.raw\n\t})\n\n\tret, _ := MergeBy(result.raw, \"instance\") //node_memory_MemTotal_bytes\n\n\tMemAvailable := func(p1, p2 *Collect) bool {\n\t\treturn bytes.Compare(p1.Get(\"node_memory_MemAvailable_bytes.value\").raw, p2.Get(\"node_memory_MemAvailable_bytes.value\").raw) \u003e 0\n\t}\n\tMemTotal := func(p1, p2 *Collect) bool {\n\t\treturn bytes.Compare(p1.Get(\"node_memory_MemTotal_bytes.value\").raw, p2.Get(\"node_memory_MemTotal_bytes.value\").raw) \u003c 0\n\t}\n\n\tsorted := newCollect(ret)\n\tsorted.SortBy(MemTotal)\n\tsorted.SortBy(MemAvailable)\n\tfmt.Println(string(sorted.raw))\n\n\t// Output:\n\t// [{\"node_memory_MemAvailable_bytes\":{\"timestamp\":1620999810.899,\"value\":\"3252543488\"},\"instance\":\"localhost:9100\",\"node_memory_MemTotal_bytes\":{\"timestamp\":1620999810.899,\"value\":\"3972988928\"}},{\"node_memory_MemAvailable_bytes\":{\"timestamp\":1620999810.899,\"value\":\"3\"},\"instance\":\"192.168.14.146:9100\",\"node_memory_MemTotal_bytes\":{\"timestamp\":1620999810.899,\"value\":\"8203091968\"}},{\"node_memory_MemAvailable_bytes\":{\"timestamp\":1620999810.899,\"value\":\"2\"},\"instance\":\"192.168.21.163:9100\",\"node_memory_MemTotal_bytes\":{\"timestamp\":1620999810.899,\"value\":\"8202657792\"}},{\"node_memory_MemAvailable_bytes\":{\"timestamp\":1620999810.899,\"value\":\"19626115072\"},\"instance\":\"192.168.21.174:9100\",\"node_memory_MemTotal_bytes\":{\"timestamp\":1620999810.899,\"value\":\"25112969216\"}},{\"node_memory_MemAvailable_bytes\":{\"timestamp\":1620999810.899,\"value\":\"1\"},\"instance\":\"192.168.14.102:9100\",\"node_memory_MemTotal_bytes\":{\"timestamp\":1620999810.899,\"value\":\"8203091968\"}}]\n}\n\nfunc Example_AAA() {\n\n\tfmt.Println(gjson.Get(string(rawArray), \"0\"))\n\tfmt.Println(gjson.Get(string(`[\"Mohamed Salah\", 11]`), \"0\"))\n\n\t// Output:\n\t// {\"v\":{\"cv\":1}}\n\t//Mohamed Salah\n}\n```\n\n\n### License\n\nMIT © [Daniel Eckermann](https://danieleckermann.com)","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftkeel-io%2Fcollectjs","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftkeel-io%2Fcollectjs","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftkeel-io%2Fcollectjs/lists"}