신속하게 배열을 JSON 문자열로 변환
스위프트에서 배열을 JSON 문자열 로 어떻게 CHAPTER 2 합니까? 기본적으로 버튼이 포함 된 텍스트 필드가 있습니다. 버튼을 표시 할 텍스트 필드 텍스트가 추가 testArray
됩니다. 또한이 배열을 JSON 문자열 로 CHAPTER 2하고 싶습니다 .
이것이 내가 시도한 것입니다.
func addButtonPressed() {
if goalsTextField.text == "" {
// Do nothing
} else {
testArray.append(goalsTextField.text)
goalsTableView.reloadData()
saveDatatoDictionary()
}
}
func saveDatatoDictionary() {
data = NSKeyedArchiver.archivedDataWithRootObject(testArray)
newData = NSJSONSerialization.JSONObjectWithData(data!, options: NSJSONReadingOptions(), error: nil) as? NSData
string = NSString(data: newData!, encoding: NSUTF8StringEncoding)
println(string)
}
또한 내 방법을 사용하여 JSON 문자열 을 반환하고 싶습니다 savetoDictionart()
.
그대로 데이터로 변환 한 다음 데이터를 JSON (실패, JSON이 아님)으로 개체로 변환하고이를 확장 변환하려고 시도하면 기본적으로 변환이 많이 발생합니다.
배열에 JSON 인코딩 가능한 값 (문자열, 숫자, 사전, 배열, nil) 만 포함되어있는 한 NSJSONSerialization을 사용하여 수행 할 수 있습니다.
대신 array-> data-> string 부분을 수행하십시오.
스위프트 3/4
let array = [ "one", "two" ]
func json(from object:Any) -> String? {
guard let data = try? JSONSerialization.data(withJSONObject: object, options: []) else {
return nil
}
return String(data: data, encoding: String.Encoding.utf8)
}
print("\(json(from:array as Any))")
원래 답변
let array = [ "one", "two" ]
let data = NSJSONSerialization.dataWithJSONObject(array, options: nil, error: nil)
let string = NSString(data: data!, encoding: NSUTF8StringEncoding)
강제 언 래핑을 사용하는 것이 좋습니다. 올바른 시작점을 제공합니다.
Swift 3.0-4.0 버전
do {
//Convert to Data
let jsonData = try JSONSerialization.data(withJSONObject: dictionaryOrArray, options: JSONSerialization.WritingOptions.prettyPrinted)
//Convert back to string. Usually only do this for debugging
if let JSONString = String(data: jsonData, encoding: String.Encoding.utf8) {
print(JSONString)
}
//In production, you usually want to try and cast as the root data structure. Here we are casting as a dictionary. If the root object is an array cast as [Any].
var json = try JSONSerialization.jsonObject(with: jsonData, options: JSONSerialization.ReadingOptions.mutableContainers) as? [String: Any]
} catch {
print(error.description)
}
이 JSONSerialization.WritingOptions.prettyPrinted
옵션은 최종 소비자가 디버거에서 인쇄하는 경우 읽기 쉬운 형식으로 최종 소비자에게 제공합니다.
참조 : Apple 문서
이 JSONSerialization.ReadingOptions.mutableContainers
옵션을 사용하면 반환 된 배열 및 / 또는 사전을 사용합니다.
모든 ReadingOptions에 대한 참조 : Apple 문서
참고 : Swift 4에는 새로운 프로토콜을 사용하여 사용하는 기능을 사용하고 있습니다. 다음은 Apples Documentation 과 시작 예제에 대한 빠른 안내입니다 .
이미 SwiftyJSON을 사용중인 경우 :
https://github.com/SwiftyJSON/SwiftyJSON
다음과 같이 할 수 있습니다.
// this works with dictionaries too
let paramsDictionary = [
"title": "foo",
"description": "bar"
]
let paramsArray = [ "one", "two" ]
let paramsJSON = JSON(paramsArray)
let paramsString = paramsJSON.rawString(encoding: NSUTF8StringEncoding, options: nil)
SWIFT 3 업데이트
let paramsJSON = JSON(paramsArray)
let paramsString = paramsJSON.rawString(String.Encoding.utf8, options: JSONSerialization.WritingOptions.prettyPrinted)!
전송에 좋은 JSON은 HTTP 본문을 JSON으로 인코딩 할 수 있기 때문에 자주 나오지 언어입니다. 그러나 JSON stringify의 강력한 사용 사례 중 하나는 AlamoFire가 현재 지원하는 Multipart Post입니다.
Swift 2.3에서 배열을 json으로 변환하는 방법
var yourString : String = ""
do
{
if let postData : NSData = try NSJSONSerialization.dataWithJSONObject(yourArray, options: NSJSONWritingOptions.PrettyPrinted)
{
yourString = NSString(data: postData, encoding: NSUTF8StringEncoding)! as String
}
}
catch
{
print(error)
}
이제 yourSting을 JSON으로 사용할 수 있습니다.
SWIFT 2.0
var tempJson : NSString = ""
do {
let arrJson = try NSJSONSerialization.dataWithJSONObject(arrInvitationList, options: NSJSONWritingOptions.PrettyPrinted)
let string = NSString(data: arrJson, encoding: NSUTF8StringEncoding)
tempJson = string! as NSString
}catch let error as NSError{
print(error.description)
}
참고 :- 사용하십시오 tempJson 변수를 사용하십시오.
힌트 : JSON 호환 개체가 포함 된 NSArray를 JSON 문서가 포함 된 NSData 개체로 변환하여 적절한 NSJSONSerialization 메서드를 사용하십시오. JSONObjectWithData가 아닙니다.
힌트 2 : 해당 데이터를 사용하는 경우는 거의 없습니다. 목적 목적으로 만.
Swift 3.0의 경우 다음을 참합니다.
var postString = ""
do {
let data = try JSONSerialization.data(withJSONObject: self.arrayNParcel, options: .prettyPrinted)
let string1:String = NSString(data: data, encoding: String.Encoding.utf8.rawValue) as! String
postString = "arrayData=\(string1)&user_id=\(userId)&markupSrcReport=\(markup)"
} catch {
print(error.localizedDescription)
}
request.httpBody = postString.data(using: .utf8)
100 % 작동 테스트
extension Array where Element: Encodable {
func asArrayDictionary() throws -> [[String: Any]] {
var data: [[String: Any]] = []
for element in self {
data.append(try element.asDictionary())
}
return data
}
}
extension Encodable {
func asDictionary() throws -> [String: Any] {
let data = try JSONEncoder().encode(self)
guard let dictionary = try JSONSerialization.jsonObject(with: data, options: .allowFragments) as? [String: Any] else {
throw NSError()
}
return dictionary
}
}
모델에서 Codable 프로토콜을 사용하는 경우 이러한 확장은 사전 표현을 얻는 데 도움이 될 수 있습니다 ( Swift 4 )
이것을 시도 할 수 있습니다.
func convertToJSONString(value: AnyObject) -> String? {
if JSONSerialization.isValidJSONObject(value) {
do{
let data = try JSONSerialization.data(withJSONObject: value, options: [])
if let string = NSString(data: data, encoding: String.Encoding.utf8.rawValue) {
return string as String
}
}catch{
}
}
return nil
}
Swift 4.2의 경우 해당 코드는 여전히 잘 작동합니다.
var mnemonic: [String] = ["abandon", "amount", "liar", "buyer"]
var myJsonString = ""
do {
let data = try JSONSerialization.data(withJSONObject:mnemonic, options: .prettyPrinted)
myJsonString = NSString(data: data, encoding: String.Encoding.utf8.rawValue) as! String
} catch {
print(error.localizedDescription)
}
return myJsonString
참조 URL : https://stackoverflow.com/questions/28325268/convert-array-to-json-string-in-swift
'ProgramingTip' 카테고리의 다른 글
django 관리자 생성 후 사이트 일치 쿼리 가져 오기 오기가 존재하지 않음 발생 오류 (0) | 2020.12.31 |
---|---|
Android 날짜 선택기에서 미래 날짜를 선택하는 방법 (0) | 2020.12.31 |
Cordova + Angularjs + 장치 준비 (0) | 2020.12.31 |
Android에서 알림의 가운데 텍스트 (0) | 2020.12.31 |
비트 XOR (배타적 OR)은 무엇을 의미합니까? (0) | 2020.12.31 |