I am trying to Parse Json & save Student Pecentage to a csv file using GO language .
With below code i am able to print and save Rollno. and marks in a csv successfully .
package main
import (
"encoding/csv"
"fmt"
"net/http"
"os"
)
func PageRequest(w http.ResponseWriter, r *http.Request) {
// Default page number is 1
if len(r.URL.Path) <= 1 {
r.URL.Path = "/1"
}
// Page number is not negative or 0
page.Abs(page)
if page.Cmp(one) == -1 {
page.SetInt64(1)
}
// Page header
fmt.Fprintf(w, PageHeader, pages, previous, next)
// Save in csv
csvfile, err := os.OpenFile("marks.csv", os.O_WRONLY|os.O_CREATE|os.O_APPEND, 0666)
if err != nil {
fmt.Println("Error:", err)
return
}
defer csvfile.Close()
writer := csv.NewWriter(csvfile)
defer writer.Flush()
// Marks for UID
UID, length := compute(start)
for i := 0; i < length; i++ {
key := UID[i]
fmt.Fprintf(w, key.fname, key.marks, key.rollno)
records := [][]string{{key.fname, key.marks, key.rollno}}
for _, record := range records {
err := writer.Write(record)
if err != nil {
fmt.Println("Error:", err)
return
}
}
}
// Page Footer
fmt.Fprintf(w, PageFooter, previous, next)
}
This is what I am doing
Visitor visits studentmarks.com/page=1 RollNo. & Marks for 10 students are displayed and it is also saved in a CSV [Working Perfectly with above code]
It Makes a request to studentpercentagejson.com/Roll1,Roll2,Roll3 (all RollNo. that we got in step1) The Json response would be like
[{"name":"James","Percentage":96.5,"RollNo":101},
{"name":"William","Percentage":36.0,"RollNo":102},
{"name":"Jacob","Percentage":63.0,"RollNo":103},
{"name":"Wilson","Percentage":69.3,"RollNo":104},
{"name":"Kurtson","Percentage":16.9,"RollNo":105},
{"name":"Tom","Percentage":86.3,"RollNo":106}]
Extract Name & Percentage fields & save in a csv .
progress so far -
package main
import (
"encoding/json"
"fmt"
"net/http"
)
type object []struct {
Name string `json:"name"`
Percentage float64 `json:"Percentage"`
RollNo int `json:"RollNo"`
}
func main() {
http.HandleFunc("/", PageRequest)
res, err := http.Get("https://studentpercentagejson.com/key.rollno")
if err != nil {
panic(err.Error())
}
defer res.Body.Close()
err = json.NewDecoder(res.Body).Decode(&s)
if err != nil {
fmt.Println("whoops:", err)
}
log.Println("Listening")
log.Fatal(http.ListenAndServe(":8080", nil))
}
How can I print and save Percentage extracted from the JSON Response using go language?
I don't understand what you're doing using server APIs. But I answer how to decode JSON from http response.
package main
import (
"encoding/json"
"fmt"
"net/http"
)
type object []struct {
}
type ObjectsAPIResponse struct {
Allmarks []object
}
func main() {
res, err := http.Get("https://studentpercentagejson.com/key.rollno")
if err != nil {
panic(err.Error())
}
defer res.Body.Close()
var s ObjectsAPIResponse
err = json.NewDecoder(res.Body).Decode(&s)
if err != nil {
fmt.Println("whoops:", err)
}
fmt.Println(s.Allmarks)
}
var rollNos []string
for i := 0; i < length; i++ {
key := UID[i]
fmt.Fprintf(w, key.fname, key.marks, key.rollno)
records := [][]string{{key.fname, key.marks, key.rollno}}
rollNos = append(rollNos, key.rollno)
for _, record := range records {
err := writer.Write(record)
if err != nil {
fmt.Println("Error:", err)
return
}
}
}
uri := "http://studentpercentagejson.com/" + strings.Join(rollNos, ",")
res, err := http.Get(uri)
if err != nil {
log.Fatal(err)
}
defer res.Body.Close()
var s ObjectsAPIResponse
err = json.NewDecoder(res.Body).Decode(&s)
if err != nil {
log.Fatal(err)
}
fmt.Println(s.Allmarks[0].Name)
fmt.Println(s.Allmarks[0].Percentage)
fmt.Println(s.Allmarks[0].RollNo)