GithubHelp home page GithubHelp logo

oliveagle / jsonpath Goto Github PK

View Code? Open in Web Editor NEW
295.0 9.0 92.0 62 KB

golang jsonpath library. follow the majority rules in this article http://goessner.net/articles/JsonPath/

License: MIT License

Go 100.00%

jsonpath's Introduction

JsonPath

Build Status

A golang implementation of JsonPath syntax. follow the majority rules in http://goessner.net/articles/JsonPath/ but also with some minor differences.

this library is till bleeding edge, so use it at your own risk. :D

Golang Version Required: 1.5+

Get Started

go get github.com/oliveagle/jsonpath

example code:

import (
    "github.com/oliveagle/jsonpath"
    "encoding/json"
)

var json_data interface{}
json.Unmarshal([]byte(data), &json_data)

res, err := jsonpath.JsonPathLookup(json_data, "$.expensive")

//or reuse lookup pattern
pat, _ := jsonpath.Compile(`$.store.book[?(@.price < $.expensive)].price`)
res, err := pat.Lookup(json_data)

Operators

referenced from github.com/jayway/JsonPath

Operator Supported Description
$ Y The root element to query. This starts all path expressions.
@ Y The current node being processed by a filter predicate.
* X Wildcard. Available anywhere a name or numeric are required.
.. X Deep scan. Available anywhere a name is required.
. Y Dot-notated child
['' (, '')] X Bracket-notated child or children
[ (, )] Y Array index or indexes
[start:end] Y Array slice operator
[?()] Y Filter expression. Expression must evaluate to a boolean value.

Examples

given these example data.

{
    "store": {
        "book": [
            {
                "category": "reference",
                "author": "Nigel Rees",
                "title": "Sayings of the Century",
                "price": 8.95
            },
            {
                "category": "fiction",
                "author": "Evelyn Waugh",
                "title": "Sword of Honour",
                "price": 12.99
            },
            {
                "category": "fiction",
                "author": "Herman Melville",
                "title": "Moby Dick",
                "isbn": "0-553-21311-3",
                "price": 8.99
            },
            {
                "category": "fiction",
                "author": "J. R. R. Tolkien",
                "title": "The Lord of the Rings",
                "isbn": "0-395-19395-8",
                "price": 22.99
            }
        ],
        "bicycle": {
            "color": "red",
            "price": 19.95
        }
    },
    "expensive": 10
}

example json path syntax.

jsonpath result
$.expensive 10
$.store.book[0].price 8.95
$.store.book[-1].isbn "0-395-19395-8"
$.store.book[0,1].price [8.95, 12.99]
$.store.book[0:2].price [8.95, 12.99, 8.99]
$.store.book[?(@.isbn)].price [8.99, 22.99]
$.store.book[?(@.price > 10)].title ["Sword of Honour", "The Lord of the Rings"]
$.store.book[?(@.price &lt; $.expensive)].price [8.95, 8.99]
$.store.book[:].price [8.9.5, 12.99, 8.9.9, 22.99]
$.store.book[?(@.author =~ /(?i).*REES/)].author "Nigel Rees"

Note: golang support regular expression flags in form of (?imsU)pattern

jsonpath's People

Contributors

creepfmd avatar kellrott avatar oliveagle avatar superfell avatar tolleiv avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

jsonpath's Issues

example not working

$.store.book[?(@.price < $.expensive)].price

is returning

[8.95,12.99,8.99,22.99]

for me

[*] over objects returns an error

Expressions like $.a[*].b over inputs like {"a": {"foo": {"b": 1}}} return an error object is not Slice when evaluating. Other implementations can handle these expressions, treating them as wildcards over the keys in the object.

panic and SIGSEGV when referencing nested elements that are not present

Given the following json

{
  "ref": "refs/heads/develop",
  "before": "3c7a885113813e000e3c55087c74a7afae769def",
  "after": "0000000000000000000000000000000000000000",
  "created": false,
  "deleted": true,
  "forced": false,
  "base_ref": null,
  "compare": "https://github.umn.edu/MSI-Puppet/persistent_systems_node_hieradata/compare/3c7a88511381...000000000000",
  "commits": [

  ],
  "head_commit": null,
  "repository": {
    "id": 39928,
    "name": "persistent_systems_node_hieradata",
    "full_name": "MSI-Puppet/persistent_systems_node_hieradata",
    "owner": {
      "name": "MSI-Puppet",
      "email": null,
      "login": "MSI-Puppet",
      "id": 10233,
      "avatar_url": "https://avatars.github.umn.edu/u/10233?",
      "gravatar_id": "",
      "url": "https://github.umn.edu/api/v3/users/MSI-Puppet",
      "html_url": "https://github.umn.edu/MSI-Puppet",
      "followers_url": "https://github.umn.edu/api/v3/users/MSI-Puppet/followers",
      "following_url": "https://github.umn.edu/api/v3/users/MSI-Puppet/following{/other_user}",
      "gists_url": "https://github.umn.edu/api/v3/users/MSI-Puppet/gists{/gist_id}",
      "starred_url": "https://github.umn.edu/api/v3/users/MSI-Puppet/starred{/owner}{/repo}",
      "subscriptions_url": "https://github.umn.edu/api/v3/users/MSI-Puppet/subscriptions",
      "organizations_url": "https://github.umn.edu/api/v3/users/MSI-Puppet/orgs",
      "repos_url": "https://github.umn.edu/api/v3/users/MSI-Puppet/repos",
      "events_url": "https://github.umn.edu/api/v3/users/MSI-Puppet/events{/privacy}",
      "received_events_url": "https://github.umn.edu/api/v3/users/MSI-Puppet/received_events",
      "type": "Organization",
      "site_admin": false
    },
    "private": true,
    "html_url": "https://github.umn.edu/MSI-Puppet/persistent_systems_node_hieradata",
    "description": "Node-specific hiera (e)yaml files for systems managed by ASO-PSI",
    "fork": false,
    "url": "https://github.umn.edu/MSI-Puppet/persistent_systems_node_hieradata",
    "forks_url": "https://github.umn.edu/api/v3/repos/MSI-Puppet/persistent_systems_node_hieradata/forks",
    "keys_url": "https://github.umn.edu/api/v3/repos/MSI-Puppet/persistent_systems_node_hieradata/keys{/key_id}",
    "collaborators_url": "https://github.umn.edu/api/v3/repos/MSI-Puppet/persistent_systems_node_hieradata/collaborators{/collaborator}",
    "teams_url": "https://github.umn.edu/api/v3/repos/MSI-Puppet/persistent_systems_node_hieradata/teams",
    "hooks_url": "https://github.umn.edu/api/v3/repos/MSI-Puppet/persistent_systems_node_hieradata/hooks",
    "issue_events_url": "https://github.umn.edu/api/v3/repos/MSI-Puppet/persistent_systems_node_hieradata/issues/events{/number}",
    "events_url": "https://github.umn.edu/api/v3/repos/MSI-Puppet/persistent_systems_node_hieradata/events",
    "assignees_url": "https://github.umn.edu/api/v3/repos/MSI-Puppet/persistent_systems_node_hieradata/assignees{/user}",
    "branches_url": "https://github.umn.edu/api/v3/repos/MSI-Puppet/persistent_systems_node_hieradata/branches{/branch}",
    "tags_url": "https://github.umn.edu/api/v3/repos/MSI-Puppet/persistent_systems_node_hieradata/tags",
    "blobs_url": "https://github.umn.edu/api/v3/repos/MSI-Puppet/persistent_systems_node_hieradata/git/blobs{/sha}",
    "git_tags_url": "https://github.umn.edu/api/v3/repos/MSI-Puppet/persistent_systems_node_hieradata/git/tags{/sha}",
    "git_refs_url": "https://github.umn.edu/api/v3/repos/MSI-Puppet/persistent_systems_node_hieradata/git/refs{/sha}",
    "trees_url": "https://github.umn.edu/api/v3/repos/MSI-Puppet/persistent_systems_node_hieradata/git/trees{/sha}",
    "statuses_url": "https://github.umn.edu/api/v3/repos/MSI-Puppet/persistent_systems_node_hieradata/statuses/{sha}",
    "languages_url": "https://github.umn.edu/api/v3/repos/MSI-Puppet/persistent_systems_node_hieradata/languages",
    "stargazers_url": "https://github.umn.edu/api/v3/repos/MSI-Puppet/persistent_systems_node_hieradata/stargazers",
    "contributors_url": "https://github.umn.edu/api/v3/repos/MSI-Puppet/persistent_systems_node_hieradata/contributors",
    "subscribers_url": "https://github.umn.edu/api/v3/repos/MSI-Puppet/persistent_systems_node_hieradata/subscribers",
    "subscription_url": "https://github.umn.edu/api/v3/repos/MSI-Puppet/persistent_systems_node_hieradata/subscription",
    "commits_url": "https://github.umn.edu/api/v3/repos/MSI-Puppet/persistent_systems_node_hieradata/commits{/sha}",
    "git_commits_url": "https://github.umn.edu/api/v3/repos/MSI-Puppet/persistent_systems_node_hieradata/git/commits{/sha}",
    "comments_url": "https://github.umn.edu/api/v3/repos/MSI-Puppet/persistent_systems_node_hieradata/comments{/number}",
    "issue_comment_url": "https://github.umn.edu/api/v3/repos/MSI-Puppet/persistent_systems_node_hieradata/issues/comments{/number}",
    "contents_url": "https://github.umn.edu/api/v3/repos/MSI-Puppet/persistent_systems_node_hieradata/contents/{+path}",
    "compare_url": "https://github.umn.edu/api/v3/repos/MSI-Puppet/persistent_systems_node_hieradata/compare/{base}...{head}",
    "merges_url": "https://github.umn.edu/api/v3/repos/MSI-Puppet/persistent_systems_node_hieradata/merges",
    "archive_url": "https://github.umn.edu/api/v3/repos/MSI-Puppet/persistent_systems_node_hieradata/{archive_format}{/ref}",
    "downloads_url": "https://github.umn.edu/api/v3/repos/MSI-Puppet/persistent_systems_node_hieradata/downloads",
    "issues_url": "https://github.umn.edu/api/v3/repos/MSI-Puppet/persistent_systems_node_hieradata/issues{/number}",
    "pulls_url": "https://github.umn.edu/api/v3/repos/MSI-Puppet/persistent_systems_node_hieradata/pulls{/number}",
    "milestones_url": "https://github.umn.edu/api/v3/repos/MSI-Puppet/persistent_systems_node_hieradata/milestones{/number}",
    "notifications_url": "https://github.umn.edu/api/v3/repos/MSI-Puppet/persistent_systems_node_hieradata/notifications{?since,all,participating}",
    "labels_url": "https://github.umn.edu/api/v3/repos/MSI-Puppet/persistent_systems_node_hieradata/labels{/name}",
    "releases_url": "https://github.umn.edu/api/v3/repos/MSI-Puppet/persistent_systems_node_hieradata/releases{/id}",
    "deployments_url": "https://github.umn.edu/api/v3/repos/MSI-Puppet/persistent_systems_node_hieradata/deployments",
    "created_at": 1514481400,
    "updated_at": "2018-01-19T20:29:29Z",
    "pushed_at": 1516395849,
    "git_url": "git://github.umn.edu/MSI-Puppet/persistent_systems_node_hieradata.git",
    "ssh_url": "[email protected]:MSI-Puppet/persistent_systems_node_hieradata.git",
    "clone_url": "https://github.umn.edu/MSI-Puppet/persistent_systems_node_hieradata.git",
    "svn_url": "https://github.umn.edu/MSI-Puppet/persistent_systems_node_hieradata",
    "homepage": "",
    "size": 7,
    "stargazers_count": 0,
    "watchers_count": 0,
    "language": null,
    "has_issues": true,
    "has_projects": true,
    "has_downloads": true,
    "has_wiki": true,
    "has_pages": false,
    "forks_count": 0,
    "mirror_url": null,
    "archived": false,
    "open_issues_count": 0,
    "forks": 0,
    "open_issues": 0,
    "watchers": 0,
    "default_branch": "master",
    "stargazers": 0,
    "master_branch": "master",
    "organization": "MSI-Puppet"
  },
  "pusher": {
    "name": "bert0214",
    "email": "[email protected]"
  },
  "organization": {
    "login": "MSI-Puppet",
    "id": 10233,
    "url": "https://github.umn.edu/api/v3/orgs/MSI-Puppet",
    "repos_url": "https://github.umn.edu/api/v3/orgs/MSI-Puppet/repos",
    "events_url": "https://github.umn.edu/api/v3/orgs/MSI-Puppet/events",
    "hooks_url": "https://github.umn.edu/api/v3/orgs/MSI-Puppet/hooks",
    "issues_url": "https://github.umn.edu/api/v3/orgs/MSI-Puppet/issues",
    "members_url": "https://github.umn.edu/api/v3/orgs/MSI-Puppet/members{/member}",
    "public_members_url": "https://github.umn.edu/api/v3/orgs/MSI-Puppet/public_members{/member}",
    "avatar_url": "https://avatars.github.umn.edu/u/10233?",
    "description": null
  },
  "sender": {
    "login": "bert0214",
    "id": 3579,
    "avatar_url": "https://avatars.github.umn.edu/u/3579?",
    "gravatar_id": "",
    "url": "https://github.umn.edu/api/v3/users/bert0214",
    "html_url": "https://github.umn.edu/bert0214",
    "followers_url": "https://github.umn.edu/api/v3/users/bert0214/followers",
    "following_url": "https://github.umn.edu/api/v3/users/bert0214/following{/other_user}",
    "gists_url": "https://github.umn.edu/api/v3/users/bert0214/gists{/gist_id}",
    "starred_url": "https://github.umn.edu/api/v3/users/bert0214/starred{/owner}{/repo}",
    "subscriptions_url": "https://github.umn.edu/api/v3/users/bert0214/subscriptions",
    "organizations_url": "https://github.umn.edu/api/v3/users/bert0214/orgs",
    "repos_url": "https://github.umn.edu/api/v3/users/bert0214/repos",
    "events_url": "https://github.umn.edu/api/v3/users/bert0214/events{/privacy}",
    "received_events_url": "https://github.umn.edu/api/v3/users/bert0214/received_events",
    "type": "User",
    "site_admin": false,
    "ldap_dn": "CN=bert0214,OU=People,DC=ad,DC=umn,DC=edu"
  }
}

One of the following paths seems to cause the process to panic:
$.head_commit.author.username
$.head_commit.message

Note that head_commit is null in the json.

Stack trace:

panic: runtime error: invalid memory address or nil pointer dereference [recovered]
        panic: runtime error: invalid memory address or nil pointer dereference
[signal SIGSEGV: segmentation violation code=0x1 addr=0xa0 pc=0x8450d7]

goroutine 23 [running]:
text/template.errRecover(0xc420119aa8)
        /usr/local/go/src/text/template/exec.go:140 +0x1df
panic(0x8dbc60, 0xc0fa70)
        /usr/local/go/src/runtime/panic.go:491 +0x283
github.com/oliveagle/jsonpath.get_key(0x0, 0x0, 0xc420187681, 0x7, 0x0, 0x7, 0x0, 0x0)
        /local_home/mbaynton/gopath/src/github.com/oliveagle/jsonpath/jsonpath.go:278 +0x67
github.com/oliveagle/jsonpath.JsonPathLookup(0x8d8200, 0xc42022d320, 0xc42013200c, 0x15, 0x8afe00, 0x8afe00, 0xc42011ee01, 0x7f24ca5d76c8)
        /local_home/mbaynton/gopath/src/github.com/oliveagle/jsonpath/jsonpath.go:32 +0x282
github.com/mbaynton/SimplePuppetProvisioner/lib.jsonTemplateGetter.Get(0xc42014d910, 0xc42013200c, 0x15, 0x10, 0xc4201a9c50)

[code calling the library below this point omitted]

Using the colon in the a json path fails

Based on the example provided in the README, when I try the following path:

paths, err := jsonpath.Compile("$.store.book[:].price")

it fails to compile withe the below error:

strconv.Atoi: parsing "": invalid syntax

Root node fails as an array

Assume the following data:

{
    "test": 12.34
}

compiling with $.test works.

However, when the root node is an array:

[{
    "test": 12.34
}]

compiling with either $[0].test or $[:].test fails

Deep scan JSON path expression not evalucated

Input JSON:

{
"store": {
"book": [
{
"category": "reference",
"author": "Nigel Rees",
"title": "Sayings of the Century",
"price": 8.95
},
{
"category": "fiction",
"author": "Evelyn Waugh",
"title": "Sword of Honour",
"price": 12.99
},
{
"category": "fiction",
"author": "Herman Melville",
"title": "Moby Dick",
"isbn": "0-553-21311-3",
"price": 8.99
},
{
"category": "fiction",
"author": "J. R. R. Tolkien",
"title": "The Lord of the Rings",
"isbn": "0-395-19395-8",
"price": 22.99
}
],
"bicycle": {
"color": "red",
"price": 19.95
}
},
"expensive": 10
}

JSON Path: $..book[0].price

Error returned from the package: expression don't support in filter

syntax when dot in key

How to set the jsonpath, when the key contains dot?

{
"properties": {
"footer.navigationLinks": {
"group": "layout"
, "default": [
{
"text": "Link a"
, "href": "#"
}
]
}
}
}

I just want to extract the "group" value。

filter condition with string == operation is not working

JSON : {
"store": {
"book": [
{
"category": "reference",
"author": "Nigel Rees",
"title": "Sayings of the Century",
"price": 8.95
},
{
"category": "fiction",
"author": "Evelyn Waugh",
"title": "Sword of Honour",
"price": 12.99
},
{
"category": "fiction",
"author": "Herman Melville",
"title": "Moby Dick",
"isbn": "0-553-21311-3",
"price": 8.99
},
{
"category": "fiction",
"author": "J. R. R. Tolkien",
"title": "The Lord of the Rings",
"isbn": "0-395-19395-8",
"price": 22.99
}
],
"bicycle": {
"color": "red",
"price": 19.95
}
},
"expensive": 10
}
JSON Path as $.store.book[?(@.author == 'Nigel Rees')].price

Result from this package is an empty []

JSONPath comparison and standardisation

@cburgmer's JSONPath comparison project is currently discussing some issues relating to a proposed implementation of JSONPath known as "Proposal A". May I encourage you to get involved if you are interested in influencing the direction or, indeed, if you want to make your own proposals.

Similarly, please join us in slack (invitation) for informal discussions on the comparison project and potential JSONPath standardisation.

Results do not match other implementations

The following queries provide results that do not match those of other implementations of JSONPath
(compare https://cburgmer.github.io/json-path-comparison/):

  • $[1:10]
    Input:

    ["first", "second", "third"]
    

    Expected output:

    ["second", "third"]
    

    Error:

    index [to] out of range: len: 3, to: 10
    
  • $[:2]
    Input:

    ["first", "second", "third", "forth", "fifth"]
    

    Expected output:

    ["first", "second"]
    

    Actual output:

    ["first", "second", "third"]
    
  • $[1:3]
    Input:

    ["first", "second", "third", "forth", "fifth"]
    

    Expected output:

    ["second", "third"]
    

    Actual output:

    ["second", "third", "forth"]
    
  • $[0:1]
    Input:

    ["first", "second"]
    

    Expected output:

    ["first"]
    

    Actual output:

    ["first", "second"]
    

For reference, the output was generated by the program in https://github.com/cburgmer/json-path-comparison/tree/master/implementations/Golang_github.com-oliveagle-jsonpath.

Is the deepcopy needed?

I was looking at some CPU profiles from code that calls JsonPathLookup and it spends the vast majority of its time on the xobj := deepcopy.Iface(obj) call. I was wondering why the copy is needed, is xobj mutated somewhere during the evaluation? I did a quick scan of the code and didn't spot anywhere that did.

root array with filter expression does not work

hey,

seems like root array with filter exp doesn't work

here's an example:

arr := []map[string]interface{}{
		{
			"id": 1,
			"foo": map[string]interface{}{
				"bar": "baz",
			},
		},
	}

obj := map[string][]map[string]interface{}{
	"obj": arr,
}

// yields result
jsonpath.JsonPathLookup(obj, "$.obj[?(@.id == 1)]")

// yields no result
jsonpath.JsonPathLookup(arr, path, "$.[?(@.id == 1)]")

thanks!

Fatal call has possible formatting directive error

t.Fatal("len is not 2. got: %v", len(ares))

Got errors when building a package with jsonpath lib:
/github.com/oliveagle/jsonpath/jsonpath_test.go:1182: Fatal call has possible formatting directive %v
/github.com/oliveagle/jsonpath/jsonpath_test.go:1185: Fatal call has possible formatting directive %v
/github.com/oliveagle/jsonpath/jsonpath_test.go:1188: Fatal call has possible formatting directive %v
/github.com/oliveagle/jsonpath/jsonpath_test.go:1235: Fatal call has possible formatting directive %v

t.Fatal should be t.Fatalf for above lines.
My go version is 1.10.2 and it works fine with version 1.9.4.

String comparison is done instead of numeric comparison.

String comparison is done instead of numeric comparison.

{
	"books": [ 
                { "name": "My First Book", "price": 10 }, 
		{ "name": "My Second Book", "price": 20 } 
		]
}
$.books[?(@.price > 100)].name should return [], instead it returns ["My Second Book"]

The problem occurs in

func cmp_any(obj1, obj2 interface{}, op string) (bool, error) {

where obj1 and obj2 are interpreted as string and compared.

Consider implementing RFC 9535

IETF RFC 9535 defines a proposed standard for JSONPath. Other resources:

  • A partial Compliance Test Suite.
  • Behaviours of various implementations can be checked in the comparison project. Please note that the JSONPath Reference Implementation referenced in the comparison project is stalled/archived and incomplete.
  • At the time of writing, online sandboxes for RFC 9535 are available in C# and in Rust.
  • For more background and comments on the status of the CTS and RI, see this this post (also here in the IETF blog).
  • Public discussion occurs in the IETF JSONPath Working Group's mailing list (archive).

(See here for updates to this list of resources.)

Valid approaches for this project are to (a) implement the RFC in whole or in part, (b) document its behaviour relative to the RFC, and (c) do nothing.

Avoid logging

Hi,
thanks for sharing the library. When using it within a project most people might not like the fact that debugging information is printed out to StdOut with fmt.Println.
Maybe using a logging library ( one of https://github.com/avelino/awesome-go#logging maybe) would make sense - so developers could decide whether they want debug logs or not.
Cheers

Incentive

Hi,

what's your incentive in developing this library (with so many out there already)?

Also,

this library is till bleeding edge

so how is the status now? Is it usable now? Are there still any unfinished items/ideas?

Thanks

Dependency not resolved

Hi,

I had done a go get of jsonpath. When i tried compiling it say fails with missing dependency. I couldn't get the dependency from net. It was "golang../types" the files are missing inside this and your library uses it.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.