라이브 Bitcoin 가격을 표시하는 앱을 개발 중입니다. 저는 이것을하기 위해 2 개의 API를 사용합니다 - 하나의 일반 텍스트와 하나의 JSON. JSON API에 약간의 문제가 있습니다.JSON Swift 구문 분석
가 여기에 위의 코드에서 내 스위프트 코드
func BTCFallback(){
var string2 = currencySelector.currentTitle
var url = NSURL(string:"https://bitpay.com/api/rates/" + (string2)!)
var request = NSURLRequest(URL: url)
NSURLConnection.sendAsynchronousRequest(request, queue: NSOperationQueue(), completionHandler:fallback)
var data = NSData(contentsOfURL:url);
let value = NSString(string: USD.text).doubleValue/NSString(data:data, encoding:NSUTF8StringEncoding).doubleValue
// Define JSON string
var JSONString = "\(data)"
// Get NSData using string
if let JSONData = JSONString.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false) {
// Parse JSONData into JSON object
var parsingError: NSError?
if let JSONObject = NSJSONSerialization.JSONObjectWithData(JSONData, options: nil, error: &parsingError) as? [String: AnyObject] {
// If the parsing was successful grab the rate object
var rateObject: AnyObject? = JSONObject["rate"]
// Make sure the rate object is the expected type
if let rate = rateObject as? Float {
println("rate is \(rate)")
BTC.text = "\(rate)"
}
} else {
// There was an error parsing the JSON data
println("Error parsing JSON: \(parsingError)")
BTC.text = "err1"
}
}
}
약간의, currencySelector.currentTitle는 인스턴스 USD를 들어, ISO 통화 코드와 동일합니다. BTC.text는 UI 요소입니다.
예상되는 동작은 코드에서 "rate"의 해당 부분을 BTC.text의 텍스트로 설정한다는 것입니다. 이 방법이 도움이 될 경우 API는 { "code": "USD", "name": "US Dollar", "rate": 376.71}과 같은 것을 반환합니다. 나는 무슨 일이 일어나고있는 것 376.71 여기
에 BTC.text 세트를 가지고, 위의 예를 사용하여, 원하는 것이 다음 consoe 오류 내가 잘못 뭐하는 거지 Error parsing JSON: Optional(Error Domain=NSCocoaErrorDomain Code=3840 "The operation couldn’t be completed. (Cocoa error 3840.)" (JSON text did not start with array or object and option to allow fragments not set.) UserInfo=0x16eb0f60 {NSDebugDescription=JSON text did not start with array or object and option to allow fragments not set.})
을 준다? 미리 감사드립니다!
는 데이터가 파서로 전달되기 전에 어떤 모습 않습니다 : 예 목적을 위해 나는 단순한 동기 웹 전화 :
OUPUT를 사용? – Hyperbole
1. 데이터를 문자열로 변환 한 다음 'JSONObjectWithData'이전의 데이터로 다시 변환하는 이유는 무엇입니까? 2. JSON 문자열'JSONString'을 println하고 JSON을 검사하여 유효한 JSON인지 확인하십시오. – zaph
@Hyperbole JSON은 API에서 { "code": "USD", "name": "US Dollar", "rate": 376.71}처럼 보입니다. API에 대한 링크는 https://bitpay.com/api/rates/USD – rocket101