NSURLSessionでjsonで取得したデータは"NSData"型で、byte data(のようなもの)のようです。
NSJSONSerializationでjsonの要素を取得したい場合はそのままNSDataを渡してあげれば良いのですが、
ちょっと加工したい場合はNSStringで処理を行うのが良さそうです。
NSData -> NSString -> NSData
という感じになります(これが最適なのかはわかりませんが...NSJSONSerializationに渡すNSDataに余計な文字があるとerrorになる事があったので、NSStringで適当に修正しようかという用途です)
今回のテストコードはデータを作る都合で(横着して) String -> NSData -> NSString -> 文字加工 の順になっていますが、
思っていた動作にはなっているようです。
byte配列でアクセスする場合はArray<Int8>でポインタのようにしてアクセスすると良い模様です。
NSDataに含まれる"()"を削除する例
//: Playground - noun: a place where people can play
import UIKit
var str = "(Hello)";
// String -> NSData
let data = str.dataUsingEncoding(NSUTF8StringEncoding)
// NSData -> NSString
let str2 = NSString(data:data!, encoding:NSUTF8StringEncoding)
// NSStringの文字列処理
var str3 = str2?.stringByReplacingOccurrencesOfString("(", withString: "")
str3 = str3?.stringByReplacingOccurrencesOfString(")", withString: "")
print(str3) // Helloと表示される...これを再度NSData化すればJSON処理できそう
// NSDataをbyte列として扱う
var buffer = Array<Int8>(count: data!.length, repeatedValue: 0)
data!.getBytes(&buffer, length: data!.length) // &でポインタ扱い
for byte in buffer {
// print("\(byte)")
let str = NSString(format:"%2X", byte) // 16進文字列変換
print(str)
}
0 件のコメント:
コメントを投稿