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