serg_ov
serg_ov

Reputation: 563

ios: Json in Socket.io

I need to send data over socketio from ios using swift. Data looks like this:

{
    birthday: { 
        "date": 24, 
        "month": 12, 
        "year": 1991
    }
}

I tried this code, but it doesn't work:

let myJSON = [
    "birthday" : [
        "date": 24,
        "month": 12, 
        "year": 1991
     ]
]
socket.emit("updateUserInfo", myJSON)

Please, tell me what i'm doing wrong

Upvotes: 1

Views: 3263

Answers (5)

Mussa Charles
Mussa Charles

Reputation: 4432

January 2020

Asumming that you are using Socket.IO-Client-Swift Library

Here is the sample source on how to effectively pass your JSON data.

// Adopt to SocketData protocol

 struct CustomData : SocketData {
    let name: String
    let age: Int

    func socketRepresentation() -> SocketData {
        return ["name": name, "age": age]
    }
 }

// Usage

 socket.emit("myEvent", CustomData(name: "Erik", age: 24))



Upvotes: 4

Tiago Fabre
Tiago Fabre

Reputation: 787

With socket.io you can send a normal object from javascript and it will be converted to JSON automatically.

I tested that code and everything is ok

let myJSON = { birthday: { "date": 24, "month": 12, "year": 1991}};
socket.emit("updateUserInfo", myJSON);

Upvotes: 2

Jaswinder
Jaswinder

Reputation: 2289

Try this may work , internally it's getting object from zero index

[{
    birthday: { 
        "date": 24, 
        "month": 12, 
        "year": 1991
    }
}]

Upvotes: -1

Lisarien
Lisarien

Reputation: 1136

You are right that if you have a dictionary to send over socket.io then you don't have to convert it to JSON because the method socket.emit does that for you.

So the syntax you show seems to be correct : socket.emit("event-as-string", dictionary).

You should tell us the exact error you are encountering such as someone can help you.

Upvotes: 2

Peheje
Peheje

Reputation: 14214

I believe you'll need to convert your Swift object to a JSON string. As Eric D. said there's a built in way to convert dictionary to JSON. If you already have a class representation of the data, you can take a look at a Swift class to JSON converter here:

https://gist.github.com/peheje/cc3618253d4f38ea4885

Have you tried just writing it as a string?

let myJSON = "[\"birthday\" : [\"date\": 24, \"month\": 12, \"year\": 1991]]"

Upvotes: 0

Related Questions