2017-06-05 11 views
11

मैं निम्नलिखित शब्दकोश जो JSONJSON के शब्दकोश तेज 3

को
let store = [ 
     "newTask" : [ 
      "project_name": "iOS", 
      "total_time":0, 
      "color":"blue" 
     ] 
    ] 

मैं निम्नलिखित कोड का उपयोग कर इस serialising हूँ और फिर एक बनाने http बदल जाती है के साथ एक पोस्ट अनुरोध करने के लिए कोशिश कर रहा हूँ में दो बार धारावाहिक की जा रही -POST अनुरोध निम्न विकल्पों का उपयोग:

 let jsonData = try? JSONSerialization.data(withJSONObject: store) 

     var request = URLRequest(url: URL(string: "http://localhost:3000/store")!) 
     request.httpMethod = "POST" 
     request.httpBody = jsonData 

मैं भी निम्नलिखित db.json फ़ाइल

{ 
"store": [ 
    { 
    "id": 0, 
    "ios": { 
     "project_name": "iOS", 
     "total_time": 0, 
     "color": "blue" 
    } 
    }, 
    { 
    "id": 1, 
    "elm": { 
     "project_name": "elm", 
     "total_time": 0, 
     "color": "blue" 
    } 
    } 
] 
} 
के साथ एक json-सर्वर https://github.com/typicode/json-server चला रहा हूँ

समस्या मैं कर रहा हूँ कि DB में नए जोड़े गए आइटम निम्न स्वरूप के साथ गलत दिखाई देता है:

{ 
    "{\"newTask\":{\"project_name\":\"iOS\",\"total_time\":0,\"color\":\"blue\"}}": "", 
    "id": 10 
}, 

मैं क्यों यह कुंजी के रूप में पूरे शब्दकोश serialising है के रूप में अनिश्चित हूं और उसके बाद एक खाली मूल्य के रूप में स्ट्रिंग।

अद्यतन

यहाँ कोड है कि सर्वर के लिए पदों यह है:

let task = URLSession.shared.dataTask(with: request) { data, response, error in 
       guard let data = data, error == nil else {             // check for fundamental networking error 
        print("error=\(error)") 
        return 
       } 

       if let httpStatus = response as? HTTPURLResponse, httpStatus.statusCode != 200 {   // check for http errors 
        print("statusCode should be 200, but is \(httpStatus.statusCode)") 
        print("response = \(response)") 
       } 

       do { 
        if let json = try JSONSerialization.jsonObject(with: data, options: .mutableContainers) as? [String: Any] { 
         print(json) 



        } 

       } catch let error { 
        print(error.localizedDescription) 
       } 

      } 
      task.resume() 

एक तरफ ध्यान दें के रूप में, मैं डाकिया के माध्यम से इस pining की कोशिश की है और यह सब ठीक काम करता है। नीचे इसका एक स्क्रीनशॉट संलग्न करना। enter image description here

किसी भी मदद की सराहना की जाएगी, धन्यवाद!

+0

@EricAya इतनी जल्दी संपर्क में आने के लिए धन्यवाद! मैंने उपर्युक्त पोस्ट को http अनुरोध पोस्ट करने के अपडेट के साथ अद्यतन किया है और यह समझाते हुए कि डाकिया पर एक ही अनुरोध ठीक काम करता है। –

+0

@EricAya मैंने इसे बदल दिया है ताकि कुंजी नाम बिल्कुल वही हो। ऐसा लगता है कि डाकिया पर ठीक काम करता है। समस्याएं HTTP अनुरोध या सीरियलाइजेशन से होने वाली सबसे अधिक संभावना से संबंधित हैं। –

उत्तर

2

जब आप अपना URLRequest बनाते हैं तो यह लाइन आपके लिए ठीक करेगी?

request.setValue("application/json", forHTTPHeaderField: "Content-Type") 

डाकिया में आप आवेदन/json के रूप में यह भेज रहे हैं तो मैं आप अपनी स्विफ्ट कोड में भी ऐसा ही करने की जरूरत है उम्मीद करेंगे।

+0

बिल्कुल सही! उस से अवगत नहीं था। मैंने प्रतिक्रिया को ध्यान में रखा और प्रतिक्रिया प्रकार एप्लिकेशन/जेसन पर सेट किया गया था, इसलिए सोचा कि पोस्ट अनुरोध एक ही प्रकार का था। यह मेरे लिए हल करता है! : तादा: थांस्क! –

संबंधित मुद्दे