Неверная отправка JSON из Swift в Node.js - PullRequest
0 голосов
/ 28 мая 2018

Мне нужно отправить быструю структуру на сервер javascript node.js, рассматриваемая структура содержит строковое поле и массив типа ItemStruct!Ниже я положил текст JSON!Теперь я понимаю, что проблема заключается в том, что json не отформатирован должным образом. Мой вопрос: как мне решить эту проблему?

Печать JSON с сервера:

    { '{\n  "Note" : "Sac",\n  "Articoli" : ':
   { '\n    {\n      "Fornitore" : "COMET",\n      "Prezzo" : 48.850000000000001,\n      "CodArt" : "GW.2000",\n      "Importato" : "COMET",\n      "PrezzoListino" : 58.149999999999999,\n      "IdArticolo" : 8013,\n      "CodMarca" : "ARE",\n      "Descrizione" : "LANTERNA RICARICABILE NEW LED"\n    }\n  ': '' } }

Код Swift:

struct ArticoloStruct: Codable {

       var IdArticolo: Int
       var CodArt: String!
       var CodMarca: String!
       var Descrizione: String!
       var Prezzo: Double!
       var PrezzoListino: Double!
       var CodiceValuta: String!
       var Fornitore: String!
       var Importato: String!
}

struct RapportinoStruct: Codable {        
  var Note:String
  var Articoli:[ArticoloStruct]
}

class RapportiniModel {
static let lock = NSLock()

init() {

}

func GeneraRapportino(Note: String, Articoli: [ArticoloStruct], completion: @escaping (String) -> ())
{
    RapportiniModel.lock.lock()

    let db = Database()
    let value=RapportinoStruct(Note: Note, Articoli: Articoli)
    let encoder = JSONEncoder()
    encoder.outputFormatting = .prettyPrinted
    let jsonData = try! encoder.encode(value)
    print("JSON Value: \(jsonData)")
    var request = URLRequest(url: URL(string: db.GetServerURL() + "/rapportini/generarapportino")!)
    request.httpMethod = "POST"
    request.httpBody = jsonData
    print("\n Body Request: \(request.httpBody)")
    let task = URLSession.shared.dataTask(with: request) { data, response, error in
        guard let data = data, error == nil else {
            print(error?.localizedDescription ?? "No data")
            completion("false")
            return
        }
        let responseJSON = try? JSONSerialization.jsonObject(with: data, options: [])
        if let responseJSON = responseJSON as? [String: Any] {
            let read = responseJSON["return"]!
            completion(read as! String)
        }

    }
    task.resume()

    print("Fine")
    RapportiniModel.lock.unlock()
}

}

Узел.js: Код:

app.post("/rapportini/generarapportino",async function(request,response)
{
    console.log("\n Qualcuno sta generando un rapportino");
    try
    {
        console.log(request.body);
        var data = JSON.parse(Object.keys(request.body)[0]);
        console.log("\n Data: ",data);
        const ret=await RapportiniController.GeneraRapportino(data.Note);
        response.setHeader('Content-Type', 'application/json');
        response.send(JSON.stringify({ return: ret }));
    }

    catch(err){
        console.log("Errore generazione rapportino ",err)
    }

});

Ошибка Node.js:

SyntaxError: Unexpected end of JSON input
    at JSON.parse (<anonymous>)
    at /Users/riccardo/Desktop/Myapp/src/ServerJS/ServerJS/Router/Rapportini.js:14:25
    at Layer.handle [as handle_request] (/Users/riccardo/Desktop/Myapp/src/ServerJS/ServerJS/node_modules/express/lib/router/layer.js:95:5)

Запрос тела с быстрым:

335 bytes

1 Ответ

0 голосов
/ 28 мая 2018

заменить этот код

let jsonData = try? JSONEncoder().encode(value)

на

let encoder = JSONEncoder()
encoder.outputFormatting = .prettyPrinted
let jsonData = try? encoder.encode(value)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...