मैं जेएसओएन को एक एपीआई से सीजीपॉइंट्स की एक सरणी में बदलने की कोशिश कर रहा हूं जिसे मैं कोर ग्राफिक्स में उपयोग कर सकता हूं।
JSON जैसा दिखता है:
{"date":"2017-01-05","open":119.34,"high":120.2,"low":119.1,"close":119.7,"adjusted_close":109.7062,"volume":4261070},{"date":"2017-01-06","open":118.93,"high":121.5,"low":118.52,"close":120.76,"adjusted_close":110.6777,"volume":4089186},{"date":"2017-01-09","open":120.76,"high":121.06,"low":120.33,"close":120.43,"adjusted_close":110.3754,"volume":3021844}
मुझे तारीख और करीबी क्षेत्रों में दिलचस्पी है और मैं उन्हें इस प्रारूप में बदलना चाहता हूं
dataPoints:@[xy(val0,119.7),xy(val1,120.76),xy(val2,120.43)];
जहां val0...val3 ग्राफ के x आयाम में मैप की गई तिथियां हैं और मैंने परिभाषित किया है:
#define xy(__x,__y) [NSValue valueWithCGPoint:CGPointMake(__x,__y)]
मैंने #define से शादी नहीं की है। यह सिर्फ कोड है जिसे CoreGraphics अभी उपयोग कर रहा है। अगर इसे एक संरचना या ऐसा करने का कोई और तरीका है जो बहुत अच्छा होगा।
मुझे पता है कि JSON को एक सरणी में कैसे डिकोड करना है:
struct StockReport: Codable {
let date: String
let stockDatumOpen, high, low, close: Double
let adjustedClose: Double
let volume: Int
enum CodingKeys: String, CodingKey {
case date
case stockDatumOpen = "open"
case high, low, close
case adjustedClose = "adjusted_close"
case volume
}
}
typealias StockData = [StockReport]
let stockData = try? newJSONDecoder().decode(StockData.self, from: jsonData)
इसके अलावा, हालांकि, मुझे यकीन नहीं है कि सीजीपॉइंट्स की एक सरणी कैसे बनाई जाए।
मुझे लगता है कि मैं 1970 (युग) के बाद से तारीख के तार को सेकंड में बदल सकता हूं और फिर उन्हें समन्वय प्रणाली में स्केल कर सकता हूं। या मैं सरणी की अनुक्रमणिका को प्रत्येक दिन के अनुरूप पूर्णांक के रूप में उपयोग कर सकता हूं लेकिन जहां तक मुझे मिल गया है। क्या मुझे सरणी स्टॉकडेटा के माध्यम से लूप करना चाहिए और एक-एक करके अंक बनाना चाहिए? क्या कोई और शानदार तरीका है?
किसी सुझाव के लिए अग्रिम धन्यवाद।
1 उत्तर
मान लें कि आपको एक वैध जेसन स्ट्रिंग प्राप्त हो रही है (आपके द्वारा पोस्ट की गई स्ट्रिंग एक वैध जेसन स्ट्रिंग नहीं है। आप अपनी ऑब्जेक्ट्स को इसकी तिथि से सॉर्ट कर सकते हैं (यदि वे पहले से सॉर्ट नहीं किए गए हैं), तत्वों की गणना करें और CGPoint को निम्नानुसार प्रारंभ करें:
let json = """
[{"date":"2017-01-05",
"open":119.34,
"high":120.2,
"low":119.1,
"close":119.7,
"adjusted_close":109.7062,
"volume":4261070},
{"date":"2017-01-06",
"open":118.93,
"high":121.5,
"low":118.52,
"close":120.76,
"adjusted_close":110.6777,
"volume":4089186},
{"date":"2017-01-09",
"open":120.76,
"high":121.06,
"low":120.33,
"close":120.43,
"adjusted_close":110.3754,
"volume":3021844}]
"""
do {
let stocks = try JSONDecoder().decode([StockReport].self, from: Data(json.utf8))
let points = stocks.sorted{$0.date < $1.date}.enumerated().map {
CGPoint(x: Double($0.offset), y: $0.element.close)
}
print(points)
} catch {
print(error)
}
यह प्रिंट करेगा
[(0.0, 119.7), (1.0, 120.76), (2.0, 120.43)]
संबंधित सवाल
नए सवाल
json
JSON (जावास्क्रिप्ट ऑब्जेक्ट नोटेशन) मशीन और मानव पठनीय होने के लिए एक क्रमबद्ध डेटा इंटरचेंज प्रारूप है। इस टैग का उपयोग देशी जावास्क्रिप्ट वस्तुओं या जावास्क्रिप्ट ऑब्जेक्ट शाब्दिकों के लिए न करें। इससे पहले कि आप कोई प्रश्न पूछें, एक JSON सत्यापनकर्ता जैसे JSONLint (https://jsonlint.com) का उपयोग करके अपने JSON को मान्य करें।