Go语言的JSON处理详解

2019-11-10 12:16:06王振洲



4.JSON的流式读写

   Go内建的encoding/json包还提供Decoder和Encoder两个类型,用于支持JSON数据的流式,并提供NewDecoder()和NewEncoder()两个函数来便于具体实现:



    使用Decoder 和Encoder对数据流进行处理可以应用得更为广泛些,比如读写 HTTP 连接、WebSocket或文件等, Go的标准库net/rpc/jsonrpc就是一个应用了Decoder和Encoder的实际例子。

实例代码:把sql结果集以json格式输出

func getJSON(sqlString string) (string, error) {
	stmt, err := db.Prepare(sqlString)
	if err != nil {
		return nil, err
	}
	defer stmt.Close()
	rows, err := stmt.Query()
	if err != nil {
		return nil, err
	}
	defer rows.Close()
	columns, err := rows.Columns()
	if err != nil {
	 return "", err
	}
	count := len(columns)
	tableData := make([]map[string]interface{}, 0)
	values := make([]interface{}, count)
	valuePtrs := make([]interface{}, count)
	for rows.Next() {
	 for i := 0; i < count; i++ {
		 valuePtrs[i] = &values[i]
	 }
	 rows.Scan(valuePtrs...)
	 entry := make(map[string]interface{})
	 for i, col := range columns {
		 var v interface{}
		 val := values[i]
		 b, ok := val.([]byte)
		 if ok {
			 v = string(b)
		 } else {
			 v = val
		 }
		 entry[col] = v
	 }
	 tableData = append(tableData, entry)
	}
	jsonData, err := json.Marshal(tableData)
	if err != nil {
	 return "", err
	}
	fmt.Println(string(jsonData))
	return string(jsonData), nil 
}

以上就是本文的全部内容了,希望对大家学习golang有所帮助