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-helper
import (
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)
// true
import "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