本文整理匯總了Golang中encoding/json.Decoder.More方法的典型用法代碼示例。如果您正苦於以下問題:Golang Decoder.More方法的具體用法?Golang Decoder.More怎麽用?Golang Decoder.More使用的例子?那麽, 這裏精選的方法代碼示例或許可以為您提供幫助。您也可以進一步了解該方法所在類encoding/json.Decoder
的用法示例。
在下文中一共展示了Decoder.More方法的10個代碼示例,這些例子默認根據受歡迎程度排序。您可以為喜歡或者感覺有用的代碼點讚,您的評價將有助於係統推薦出更棒的Golang代碼示例。
示例1: parseSif
func parseSif(cxDecoder *json.Decoder, w *csv.Writer) {
// Edge slice used for later mapping
var edges []cx.Edge
// Node ID to node name map
nodeMap := make(map[int64]string)
for {
_, err := cxDecoder.Token()
if err == io.EOF {
break
} else if err != nil {
fmt.Println("Error: ", err)
return
}
for cxDecoder.More() {
token, err := cxDecoder.Token()
if err != nil {
fmt.Println(err)
}
if token == "nodes" {
processNode(cxDecoder, nodeMap)
} else if token == "edges" {
processEdge(cxDecoder, &edges)
}
}
}
writeSif(nodeMap, edges, *w)
}
示例2: toList
func toList(cxDecoder *json.Decoder, w io.Writer) {
// Node ID to node name map
nodeMap := make(map[string]int64)
for {
_, err := cxDecoder.Token()
if err == io.EOF {
break
} else if err != nil {
fmt.Println("Error: ", err)
return
}
for cxDecoder.More() {
token, err := cxDecoder.Token()
if err != nil {
fmt.Println(err)
}
if token == "nodes" {
processNode(cxDecoder, nodeMap)
}
}
}
err := json.NewEncoder(w).Encode(nodeMap)
if err != nil {
panic("parse err")
}
}
示例3: findFeatureArray
func findFeatureArray(dec *json.Decoder) error {
for {
t, err := dec.Token()
if err == io.EOF {
break
}
if err != nil {
return err
}
if s, ok := t.(string); ok && s == "features" && dec.More() {
// we found the features element
d, err := dec.Token()
if err != nil {
return err
}
if delim, ok := d.(json.Delim); ok {
if delim.String() == "[" {
// we have our start of the array
break
} else {
// A different kind of delimiter
return fmt.Errorf("Expected features to be an array.")
}
}
}
}
if !dec.More() {
return fmt.Errorf("Cannot find any features.")
}
return nil
}
示例4: readLevel
// parse one level of the json translation file, this func will also parse sublevels by calling
func readLevel(jspath string, dec *json.Decoder, tr map[string]string) {
if jspath == "" {
t, err := dec.Token()
if err != nil {
log.Fatal("translate error 1: ", err)
}
if fmt.Sprintf("%T:%v", t, t) != "json.Delim:{" {
log.Fatal("translate error 1.1: bad translaton file format")
}
//fmt.Printf("%s> %T:%v\n", jspath, t, t)
}
for dec.More() {
t1, err1 := dec.Token()
t2, err2 := dec.Token()
if err1 != nil {
log.Fatal("translate error 2: ", err1)
}
if err2 != nil {
log.Fatal("translate error 3: ", err2)
}
//fmt.Printf("%s: %T:%v => %T:%v\n", jspath, t1, t1, t2, t2)
var newpath string
if jspath == "" {
newpath = fmt.Sprintf("%v", t1)
} else {
newpath = fmt.Sprintf("%s.%v", jspath, t1)
}
if fmt.Sprintf("%T:%v", t2, t2) == "json.Delim:{" {
readLevel(newpath, dec, tr)
} else {
tr[newpath] = fmt.Sprintf("%v", t2)
//fmt.Printf("%s => %v\n", newpath, t2)
}
}
t, err := dec.Token()
if err != nil {
log.Fatal("translate error 3=4: ", err)
}
if fmt.Sprintf("%T:%v", t, t) != "json.Delim:}" {
log.Fatal("translate error 4.1: bad translaton file format")
}
//fmt.Printf("%s< %T:%v\n", jspath, t, t)
}
示例5: processEdge
func processEdge(decoder *json.Decoder, edges *[]cx.Edge) {
token, err := decoder.Token()
if err != nil || token != arrayStart {
return
}
var entry cx.Edge
for decoder.More() {
err := decoder.Decode(&entry)
if err != nil {
return
}
*edges = append(*edges, entry)
}
}
示例6: unmarshalJSON
func (m *omap) unmarshalJSON(dec *json.Decoder) error {
for dec.More() {
t, err := dec.Token()
if err != nil {
return err
}
key, isKey := t.(string)
if !isKey {
return fmt.Errorf("%t %s is not string(expected key)", t, t)
}
val, err := getVal(dec)
if err != nil {
return err
}
m.Set(key, val)
}
return nil
}
示例7: processNode
func processNode(decoder *json.Decoder, nodes map[int64]string) {
token, err := decoder.Token()
if err != nil || token != arrayStart {
return
}
var entry cx.Node
for decoder.More() {
err := decoder.Decode(&entry)
if err != nil {
return
}
if entry.N == "" {
nodes[entry.ID] = strconv.FormatInt(entry.ID, 10)
} else {
nodes[entry.ID] = entry.N
}
}
}
示例8: processNode
func processNode(decoder *json.Decoder, nodes map[string]int64) {
_, err := decoder.Token()
if err != nil {
return
}
var entry cx.Node
for decoder.More() {
err := decoder.Decode(&entry)
if err != nil {
return
}
if entry.N == "" {
nodes[strconv.FormatInt(entry.ID, 10)] = entry.ID
} else {
nodes[entry.N] = entry.ID
}
}
}
示例9: run
func run(cxDecoder *json.Decoder, w io.Writer) {
// Initialize handlers
handlers := initHandlers()
// Network Object
networkAttr := make(map[string]interface{})
// Elements
var nodes []cyjs.CyJSNode
var edges []cyjs.CyJSEdge
layout := make(map[string]interface{})
vps := make(map[string]interface{})
elements := cyjs.Elements{Nodes: nodes, Edges: edges}
// Temp storage for attributes
nodeAttrs := make(map[string]interface{})
edgeAttrs := make(map[string]interface{})
cxData := make(map[string]interface{})
// Basic Cytoscape.js object
cyjsNetwork := cyjs.CyJS{Data: networkAttr, Elements: elements,
CxData: cxData}
for {
_, err := cxDecoder.Token()
if err == io.EOF {
break
} else if err != nil {
log.Println(err)
return
}
// Decode entry one-by-one.
for cxDecoder.More() {
var entry map[string]interface{}
err := cxDecoder.Decode(&entry)
if err != nil {
log.Fatal(err)
}
parseCxEntry(handlers, entry, &cyjsNetwork, &nodeAttrs,
&edgeAttrs, &layout, &vps)
}
}
assignNodeAttr(cyjsNetwork.Elements.Nodes, nodeAttrs, layout)
assignEdgeAttr(cyjsNetwork.Elements.Edges, edgeAttrs)
// Add style to net (if style data is available...)
if vps != nil && reflect.ValueOf(vps).IsNil() == false {
if vps["style"] != nil {
cyjsNetwork.Style = vps["style"].([]cyjs.SelectorEntry)
}
}
jsonString, err := json.Marshal(cyjsNetwork)
if err != nil {
fmt.Println("ERR: ", err)
} else {
// fmt.Println(string(jsonString))
w.Write(jsonString)
}
//debug()
}
示例10: LoadJSON
// LoadJSON loads data from a JSON file in the database table.
//
// If src != nil, LoadJSON loads the source from src and the filename is only used
// when recording file information. The type of the argument for the src parameter
// must be []byte, or io.Reader. If src == nil, LoadJSON loads the file
// specified by filename.
func (cx *DBContext) LoadJSON(src interface{}, filename, table string) (err error) {
var dec *json.Decoder
if src != nil {
switch s := src.(type) {
case []byte:
dec = json.NewDecoder(bytes.NewReader(s))
case io.Reader:
dec = json.NewDecoder(s)
default:
return fmt.Errorf("invalid source")
}
} else {
f, err := os.Open(filename)
if err != nil {
return err
}
defer func() {
if err1 := f.Close(); err == nil {
err = err1
}
}()
dec = json.NewDecoder(f)
}
// The first row must have the name of the columns.
firstRecord := make([]string, 0)
if err = dec.Decode(&firstRecord); err != nil {
return err
}
tx, err := cx.DB.Begin()
if err != nil {
return err
}
defer func() {
if err != nil {
err1 := tx.Rollback()
if err1 != nil && datautil.VERBOSE {
log.WithFields(log.Fields{
"file": filename,
"table": table,
}).Warn(err1)
}
}
}()
insertCode := fmt.Sprintf("INSERT INTO %s (%s) VALUES(%s)",
table,
strings.Join(firstRecord, ", "),
cx.bindChars(len(firstRecord)),
)
insert, err := tx.Prepare(insertCode)
if err != nil {
return fmt.Errorf("SQL code: %q\n%s", insertCode, err)
}
list := make([]interface{}, 0)
for line := 2; dec.More(); line++ {
if err = dec.Decode(&list); err != nil {
return fmt.Errorf("%q line %d: %s", filename, line, err)
}
_, err = tx.Stmt(insert).Exec(list...)
if err != nil {
return fmt.Errorf("code: %q vars: %v => %s", insertCode, list, err)
}
}
if err = insert.Close(); err != nil && datautil.VERBOSE {
log.WithFields(log.Fields{
"file": filename,
"table": table,
}).Warn(err)
}
if err = tx.Commit(); err != nil {
return err
}
if datautil.VERBOSE {
log.WithFields(log.Fields{
"file": packer.RelativeDir(filename),
"db": cx.Conn.GetDBName(),
"table": table,
}).Info("Load JSON file")
}
return nil
}