使用Go语言保存Json数据

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

  1. 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]

  2. 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}]
    
  3. 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)
}

Collect RollNo(s)

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)