반응형
Swift 4에서 Json 문자열을 Json 개체로 변환
JSON 문자열을 JSON 개체로 변환하려고 하지만 그 후에JSONSerialization
산출량은nil
JSON에서.
응답 문자열:
[{\"form_id\":3465,\"canonical_name\":\"df_SAWERQ\",\"form_name\":\"Activity 4 with Images\",\"form_desc\":null}]
아래 코드로 이 문자열을 변환하려고 합니다.
let jsonString = response.result.value
let data: Data? = jsonString?.data(using: .utf8)
let json = (try? JSONSerialization.jsonObject(with: data, options: [])) as? [String:AnyObject]
print(json ?? "Empty Data")
문제는 당신의 jsonString이 사전이라고 생각했다는 것입니다.그런거 아냐.
그것은 사전들의 배열입니다.raw json 문자열에서 배열은 다음과 같이 시작합니다.[
그리고 사전은 시작합니다.{
.
아래 코드와 함께 당신의 json 문자열을 사용했습니다.
let string = "[{\"form_id\":3465,\"canonical_name\":\"df_SAWERQ\",\"form_name\":\"Activity 4 with Images\",\"form_desc\":null}]"
let data = string.data(using: .utf8)!
do {
if let jsonArray = try JSONSerialization.jsonObject(with: data, options : .allowFragments) as? [Dictionary<String,Any>]
{
print(jsonArray) // use the json here
} else {
print("bad json")
}
} catch let error as NSError {
print(error)
}
출력을 얻고 있습니다.
[["form_desc": <null>, "form_name": Activity 4 with Images, "canonical_name": df_SAWERQ, "form_id": 3465]]
사용.JSONSerialization
항상 신속하지 못하고 자유롭지 못한 느낌이 들었지만, 그것은 더욱 더 그러합니다.Codable
스위프트 4에서.당신이 휘두른다면,[String:Any]
단순한 것 앞에서struct
그것은 ...할 것입니다.다쳤어요 놀이터에서 이걸 확인해보세요
import Cocoa
let data = "[{\"form_id\":3465,\"canonical_name\":\"df_SAWERQ\",\"form_name\":\"Activity 4 with Images\",\"form_desc\":null}]".data(using: .utf8)!
struct Form: Codable {
let id: Int
let name: String
let description: String?
private enum CodingKeys: String, CodingKey {
case id = "form_id"
case name = "form_name"
case description = "form_desc"
}
}
do {
let f = try JSONDecoder().decode([Form].self, from: data)
print(f)
print(f[0])
} catch {
print(error)
}
최소한의 노력만으로 훨씬 더 편안하게 느낄 수 있습니다.그리고 JSON이 제대로 파싱되지 않는다면 당신은 훨씬 더 많은 정보를 얻게 될 것입니다.
여기서 해결책을 써봤는데요? [스트링:AnyObject]가 효과적이었습니다.
do{
if let json = stringToParse.data(using: String.Encoding.utf8){
if let jsonData = try JSONSerialization.jsonObject(with: json, options: .allowFragments) as? [String:AnyObject]{
let id = jsonData["id"] as! String
...
}
}
}catch {
print(error.localizedDescription)
}
아래 코드를 사용했는데 잘 작동합니다. :
let jsonText = "{\"userName\":\"Bhavsang\"}"
var dictonary:NSDictionary?
if let data = jsonText.dataUsingEncoding(NSUTF8StringEncoding) {
do {
dictonary = try NSJSONSerialization.JSONObjectWithData(data, options: [.allowFragments]) as? [String:AnyObject]
if let myDictionary = dictonary
{
print(" User name is: \(myDictionary["userName"]!)")
}
} catch let error as NSError {
print(error)
}
}
static func getJSONStringFromObject(object: Any?) -> String? {
do {
let jsonData = try JSONSerialization.data(withJSONObject: object ?? DUMMY_STRING, options: [])
return String(data: jsonData, encoding: .utf8) ?? DUMMY_STRING
} catch {
print(error.localizedDescription)
}
return DUMMY_STRING
}
언급URL : https://stackoverflow.com/questions/47281375/convert-json-string-to-json-object-in-swift-4
반응형
'sourcecode' 카테고리의 다른 글
javascript로 XML을 예쁘게 인쇄 (0) | 2023.11.05 |
---|---|
Excel에서 csv 빈 행 문제 발생 (0) | 2023.11.05 |
std::string의 컨텍스트에서 약자 SSO의 의미 (0) | 2023.10.31 |
sequelize Unknown 열 '*.createdAt'이 '필드 목록'에 있습니다. (0) | 2023.10.31 |
문자열에서 새 줄(\n)을 사용하고 HTML에서 동일하게 렌더링 (0) | 2023.10.31 |