When receive JSON-LD,
{ "@context": "https://www.w3.org/ns/activitystreams", "name": "juunini", "type": "Person", "id": "juunini" }is equals
{ "@context": "https://www.w3.org/ns/activitystreams", "as:name": "juunini", "type": "Person", "@id": "juunini" }and it also equals
[ { "https://www.w3.org/ns/activitystreams#name": [ { "@value": "juunini" } ], "@id": "juunini", "https://www.w3.org/ns/activitystreams#type": [ { "@value": "Person" } ] } ]when receive any shape of JSON-LD, we can parse and use same interface.
go get github.com/cloudmatelabs/go-jsonld-helperimport ( jsonld_helper "github.com/cloudmatelabs/go-jsonld-helper" ) var doc = map[string]any{ "@context": []any{ "https://www.w3.org/ns/activitystreams", map[string]any{ "manuallyApprovesFollowers": "as:manuallyApprovesFollowers", }, }, "@id": "https://mastodon.social/users/juunini", "as:type": "Person", "url": "https://mastodon.social/@juunini", "as:image": map[string]any{ "@type": "Image", "as:mediaType": "image/png", "url": "https://files.mastodon.social/accounts/headers/109/408/471/076/954/889/original/f4158a0d06a05763.png", }, "manuallyApprovesFollowers": "true", } jsonld, err := jsonld_helper.ParseJsonLD(doc, nil) if err != nil { // handle error } imageType := jsonld.ReadKey("image").ReadKey("mediaType").StringOrElse("") // image/png imageURL := jsonld.ReadKey("image").ReadKey("url").StringOrThrow() // https://files.mastodon.social/accounts/headers/109/408/471/076/954/889/original/f4158a0d06a05763.png id := jsonld.ReadKey("id").Get() id := jsonld.ReadKey("@id").Get() // https://mastodon.social/users/juunini messageType := jsonld.ReadKey("type").Get() messageType := jsonld.ReadKey("@type").Get() // Person manuallyApprovesFollowers := jsonld.ReadKey("manuallyApprovesFollowers").BooleanOrElse(false) // trueimport "github.com/piprate/json-gold/ld" jsonld_helper.ParseJsonLD (doc any, options *ld.JsonLdOptions) (JsonLDReader, error) .Value() any .Length() int .ReadKey(string) JsonLDReader .ReadIndex(int) JsonLDReader .Get() any .GetOrElse(any) any .GetOrThrow(error) (any, error) .StringOrElse(string) string .StringOrThrow(error) (string, error) .BoolOrElse(bool) bool .BoolOrThrow(error) (bool, error) .IntOrElse(int) int .IntOrThrow(error) (int, error) .FloatOrElse(float64) float64 .FloatOrThrow(error) (float64, error)But, this library use json-gold.
json-gold is licensed under the Apache License 2.0