graph.go
func NewGraphFromJSON(rd io.Reader, graphID string) (Graph, error) {
	js := make(map[string]map[string]map[string]float64)
	dec := json.NewDecoder(rd)
	for {
		if err := dec.Decode(&js); err == io.EOF {
			break
		} else if err != nil {
			return nil, err
		}
	}
	if _, ok := js[graphID]; !ok {
		return nil, fmt.Errorf("%s does not exist", graphID)
	}
	gmap := js[graphID]

	g := newGraph()
	for id1, mm := range gmap {
		nd1, err := g.GetNode(StringID(id1))
		if err != nil {
			nd1 = NewNode(id1)
			g.AddNode(nd1)
		}
		for id2, weight := range mm {
			nd2, err := g.GetNode(StringID(id2))
			if err != nil {
				nd2 = NewNode(id2)
				g.AddNode(nd2)
			}
			g.ReplaceEdge(nd1.ID(), nd2.ID(), weight)
		}
	}

	return g, nil
}
func NewGraphFromJSON(rd io.Reader, graphID string) (Graph, error) {
	js := make(map[string]map[string]map[string]float64)
	dec := json.NewDecoder(rd)
	for {
		if err := dec.Decode(&js); err == io.EOF {
			break
		} else if err != nil {
			return nil, err
		}
	}
	if _, ok := js[graphID]; !ok {
		return nil, fmt.Errorf("%s does not exist", graphID)
	}
	gmap := js[graphID]

	g := newGraph()
	for id1, mm := range gmap {
		nd1, err := g.GetNode(StringID(id1))
		if err != nil {
			nd1 = NewNode(id1)
			g.AddNode(nd1)
		}
		for id2, weight := range mm {
			nd2, err := g.GetNode(StringID(id2))
			if err != nil {
				nd2 = NewNode(id2)
				g.AddNode(nd2)
			}
			g.ReplaceEdge(nd1.ID(), nd2.ID(), weight)
		}
	}

	return g, nil
}
func NewGraphFromJSON ( rd io . Reader , graphID string ) ( Graph , error ) { js := make ( map [ string ] map [ string ] map [ string ] float64 ) dec := json . NewDecoder ( rd ) for { if err := dec . Decode ( & js ) ; err == io . EOF { break } else if err != nil { return nil , err } } if _ , ok := js [ graphID ] ; ! ok { return nil , fmt . Errorf ( " " , graphID ) } gmap := js [ graphID ] g := newGraph ( ) for id1 , mm := range gmap { nd1 , err := g . GetNode ( StringID ( id1 ) ) if err != nil { nd1 = NewNode ( id1 ) g . AddNode ( nd1 ) } for id2 , weight := range mm { nd2 , err := g . GetNode ( StringID ( id2 ) ) if err != nil { nd2 = NewNode ( id2 ) g . AddNode ( nd2 ) } g . ReplaceEdge ( nd1 . ID ( ) , nd2 . ID ( ) , weight ) } } return g , nil }
// NewGraphFromJSON returns a new Graph from a JSON file.
// Here's the sample JSON data:
//
//	{
//	    "graph_00": {
//	        "S": {
//	            "A": 100,
//	            "B": 14,
//	            "C": 200
//	        },
//	        "A": {
//	            "S": 15,
//	            "B": 5,
//	            "D": 20,
//	            "T": 44
//	        },
//	        "B": {
//	            "S": 14,
//	            "A": 5,
//	            "D": 30,
//	            "E": 18
//	        },
//	        "C": {
//	            "S": 9,
//	            "E": 24
//	        },
//	        "D": {
//	            "A": 20,
//	            "B": 30,
//	            "E": 2,
//	            "F": 11,
//	            "T": 16
//	        },
//	        "E": {
//	            "B": 18,
//	            "C": 24,
//	            "D": 2,
//	            "F": 6,
//	            "T": 19
//	        },
//	        "F": {
//	            "D": 11,
//	            "E": 6,
//	            "T": 6
//	        },
//	        "T": {
//	            "A": 44,
//	            "D": 16,
//	            "F": 6,
//	            "E": 19
//	        }
//	    },
//	}
//
NewGraphFromJSON returns a new Graph from a JSON file . Here s the sample JSON data : { graph_00 : { S : { A : 100 B : 14 C : 200 } A : { S : 15 B : 5 D : 20 T : 44 } B : { S : 14 A : 5 D : 30 E : 18 } C : { S : 9 E : 24 } D : { A : 20 B : 30 E : 2 F : 11 T : 16 } E : { B : 18 C : 24 D : 2 F : 6 T : 19 } F : { D : 11 E : 6 T : 6 } T : { A : 44 D : 16 F : 6 E : 19 } } }