I am able to Display JSON data to show Line Chart using Charts Library.I have Displayed all marks and Subjects but I am trying to Display in TermWise.How can be JSON Data be Seperated using TermID?
import UIKit
import Charts
import Alamofire
import SwiftyJSON
class ViewController: UIViewController , ChartViewDelegate{
@IBOutlet weak var text: UILabel!
@IBOutlet weak var lineChartView: LineChartView!
@IBOutlet weak var menu: UIBarButtonItem!
var login_details : Login?
var markdetail : [Marks] = []
var markd : Marks?
var myResponse : JSON = nil
// var Subjects: [String] = []
var subjectss : [String] = []
var marks01 : [Double] = []
var setname = String()
let Subjects = ["eng" , "sci", "math", "soc"]
let marks1 = [45,55,70,80]
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
menu.target = self.revealViewController()
menu.action = #selector(SWRevealViewController.revealToggle(_:))
if self.revealViewController() != nil {
self.view.addGestureRecognizer(self.revealViewController().panGestureRecognizer())
self.view.addGestureRecognizer(self.revealViewController().tapGestureRecognizer())
}
// text.text = markd?.NAME
// forlineView()
getmarks()
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
func getmarks(){
let student_id = login_details?.masterid
let std_id_String = student_id?.replacingOccurrences(of: "[^0-9 ]", with: "", options: NSString.CompareOptions.regularExpression, range:nil)
print("numberic",std_id_String!)
let url = NSURL(string: "http://**********/api/academics//getSingleStudentsMarks"+"?StdID=" + std_id_String!)
var request = URLRequest(url: url! as URL)
request.httpMethod = "GET"
request.setValue("application/json", forHTTPHeaderField: "Content-Type")
Alamofire.request(request).responseJSON(){ response in
switch response.result{
case.success(let data):
print("success",data)
let myresponse = JSON(data)
for marks in myresponse.array!{
let marksObj = Marks(MarksJson: marks)
self.markdetail.append(marksObj)
self.subjectss.append(marksObj.CourseName)
self.marks01.append(marksObj.marks)
// for name in markdetail{
//
// }
self.setname.append(marksObj.examDescription)
print("Markss",marksObj.marks)
self.forlineView()
self.textdisplay()
}
case.failure(let error):
print("Not Success",error)
}
}
}
func forlineView() {
// 1
self.lineChartView.delegate = self
// 2
self.lineChartView.chartDescription?.text = "Tap node for details"
// 3
self.lineChartView.chartDescription?.textColor = UIColor.red
self.lineChartView.gridBackgroundColor = UIColor.darkGray
// self.lineChartView.backgroundColor = UIColor.darkGray
// 4
self.lineChartView.noDataText = "No data provided"
// 5
setChartData(subject: subjectss)
}
func setChartData(subject : [String]) {
// 1 - creating an array of data entries
var yVals1 : [ChartDataEntry] = [ChartDataEntry]()
for i in 0..<subject.count {
yVals1.append(ChartDataEntry(x: Double(i), y: Double(marks01[i])))
}
// 2 - create a data set with our array
let set1: LineChartDataSet = LineChartDataSet(values: yVals1, label: setname)
set1.axisDependency = .left // Line will correlate with left axis values
set1.setColor(UIColor.red.withAlphaComponent(0.5)) // our line's opacity is 50%
set1.setCircleColor(UIColor.red) // our circle will be dark red
set1.lineWidth = 2.0
set1.circleRadius = 6.0 // the radius of the node circle
set1.fillAlpha = 65 / 255.0
set1.fillColor = UIColor.red
set1.highlightColor = UIColor.red
set1.drawCircleHoleEnabled = true
//3 - create an array to store our LineChartDataSets
var dataSets : [LineChartDataSet] = [LineChartDataSet]()
dataSets.append(set1)
//4 - pass our months in for our x-axis label value along with our dataSets
let data: LineChartData = LineChartData(dataSets: dataSets)
data.setValueTextColor(UIColor.red)
//5 - finally set our data
self.lineChartView.data = data
//6 - add x-axis label
let xaxis = self.lineChartView.xAxis
xaxis.valueFormatter = MyXAxisFormatter(subject)
}
func textdisplay(){
for d in self.markdetail{
self.text.text = d.NAME
}
}
}
class MyXAxisFormatter: NSObject, IAxisValueFormatter {
let subjectss: [String]
init(_ subjects: [String]) {
self.subjectss = subjects
}
func stringForValue(_ value: Double, axis: AxisBase?) -> String {
return subjectss[Int(value) % subjectss.count]
}
}
currently i am getting
JSON
(
{
CLASSNO = 1;
"CLASS_ID" = 2021;
CourseID = 4027;
CourseName = Arts;
Marks = 45;
NAME = "Calvin Patterson";
Sno = 2107;
StdID = 95;
TermID = 6022;
"Terminal_FM" = 100;
"Terminal_PM" = 40;
"UT_FM" = 50;
"UT_PM" = 20;
examDescription = "First Term";
type = Terminal;
},
{
CLASSNO = 1;
"CLASS_ID" = 2021;
CourseID = 5034;
CourseName = Math;
Marks = 90;
NAME = "Calvin Patterson";
Sno = 2108;
StdID = 95;
TermID = 6022;
"Terminal_FM" = 100;
"Terminal_PM" = 40;
"UT_FM" = 50;
"UT_PM" = 20;
examDescription = "First Term";
type = Terminal;
},
{
CLASSNO = 1;
"CLASS_ID" = 2021;
CourseID = 5035;
CourseName = English;
Marks = 52;
NAME = "Calvin Patterson";
Sno = 2109;
StdID = 95;
TermID = 6022;
"Terminal_FM" = 100;
"Terminal_PM" = 40;
"UT_FM" = 50;
"UT_PM" = 20;
examDescription = "First Term";
type = Terminal;
},
{
CLASSNO = 1;
"CLASS_ID" = 2021;
CourseID = 6034;
CourseName = hi;
Marks = 70;
NAME = "Calvin Patterson";
Sno = 2110;
StdID = 95;
TermID = 6022;
"Terminal_FM" = 100;
"Terminal_PM" = 40;
"UT_FM" = 50;
"UT_PM" = 20;
examDescription = "First Term";
type = Terminal;
},
{
CLASSNO = 1;
"CLASS_ID" = 2021;
CourseID = 4027;
CourseName = Arts;
Marks = 50;
NAME = "Calvin Patterson";
Sno = 4119;
StdID = 95;
TermID = 7024;
"Terminal_FM" = 100;
"Terminal_PM" = 40;
"UT_FM" = 50;
"UT_PM" = 20;
examDescription = Second;
type = Terminal;
},
{
CLASSNO = 1;
"CLASS_ID" = 2021;
CourseID = 5034;
CourseName = Math;
Marks = 60;
NAME = "Calvin Patterson";
Sno = 4120;
StdID = 95;
TermID = 7024;
"Terminal_FM" = 100;
"Terminal_PM" = 40;
"UT_FM" = 50;
"UT_PM" = 20;
examDescription = Second;
type = Terminal;
},
{
CLASSNO = 1;
"CLASS_ID" = 2021;
CourseID = 5035;
CourseName = English;
Marks = 70;
NAME = "Calvin Patterson";
Sno = 4121;
StdID = 95;
TermID = 7024;
"Terminal_FM" = 100;
"Terminal_PM" = 40;
"UT_FM" = 50;
"UT_PM" = 20;
examDescription = Second;
type = Terminal;
},
{
CLASSNO = 1;
"CLASS_ID" = 2021;
CourseID = 6034;
CourseName = hi;
Marks = 80;
NAME = "Calvin Patterson";
Sno = 4122;
StdID = 95;
TermID = 7024;
"Terminal_FM" = 100;
"Terminal_PM" = 40;
"UT_FM" = 50;
"UT_PM" = 20;
examDescription = Second;
type = Terminal;
}
)
required
I have displayed all JSON Data in charts.I want to Display marks and Subjects in TermWise .How it can be Done? I want to display marks and subjects in first term and Second, these terms have same subjects but marks are different and want to plot in same chart
Model class
class Marks {
var classno = String()
var class_id = String()
var course_id = String()
var marks = Double()
var Sno = String()
var stdid = String()
var TermID = String()
var CourseName = String()
var Terminal_FM = String()
var Terminal_PM = String()
var UT_FM = String()
var UT_PM = String()
var examDescription = String()
var type = String()
var transferRate = String()
var NAME = String()
init(MarksJson:JSON) {
self.classno = MarksJson["CLASSNO"].stringValue
self.class_id = MarksJson["CLASS_ID"].stringValue
self.course_id = MarksJson["CourseID"].stringValue
self.marks = MarksJson["Marks"].double!
self.Sno = MarksJson["Sno"].stringValue
self.stdid = MarksJson["StdID"].stringValue
self.TermID = MarksJson["TermID"].stringValue
self.CourseName = MarksJson["CourseName"].stringValue
self.Terminal_FM = MarksJson["Terminal_FM"].stringValue
self.Terminal_PM = MarksJson["Terminal_PM"].stringValue
self.UT_FM = MarksJson["UT_FM"].stringValue
self.UT_PM = MarksJson["UT_PM"].stringValue
self.examDescription = MarksJson["examDescription"].stringValue
self.type = MarksJson["type"].stringValue
self.transferRate = MarksJson["transferRate"].stringValue
self.NAME = MarksJson["NAME"].stringValue
}
}