GraphQL API and utilities for the rpdata project
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
package main
import ( "encoding/json" "io" "strings" )
type charInfo struct { Nicks []string `json:"nicks"` Name string `json:"name"` Author string `json:"player"` ShortName string `json:"first"` }
func load(reader io.Reader) ([]charInfo, error) { data := make(map[string]interface{}) err := json.NewDecoder(reader).Decode(&data) if err != nil { return nil, err }
links := make(map[string]string, len(data)) infos := make([]charInfo, 0, 64)
for key, value := range data { if info, ok := value.(map[string]interface{}); ok { name := info["name"].(string) author := info["player"].(string) shortName, ok := info["first"].(string) if !ok { shortName = strings.SplitN(name, " ", 2)[0] }
infos = append(infos, charInfo{ Nicks: []string{key}, Name: name, Author: author, ShortName: shortName, }) } else if nick, ok := value.(string); ok { links[key] = nick } }
for key, value := range links { for i := range infos { if infos[i].Nicks[0] == value { infos[i].Nicks = append(infos[i].Nicks, key) } } }
return infos, nil }
|