【问题标题】:Transform a String to JSONObject将字符串转换为 JSONObject
【发布时间】:2017-04-14 21:43:58
【问题描述】:

我正在构建一个使用 socket.IO 与服务器通信的 Android 应用。在套接字上,我收到以下消息:

{"id":"presenterResponse","response":"accepted","sdpAnswer":"v=0\r\no=- 3689503004 3689503004 IN IP4 0.0.0.0\r\ns=Kurento Media Server\r\nc=IN IP4 0.0.0.0\r\nt=0 0\r\na=msid-semantic: WMS ARDAMS\r\na=group:BUNDLE audio video\r\nm=audio 1 UDP/TLS/RTP/SAVPF 111 0\r\na=extmap:3 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time\r\na=mid:audio\r\na=rtcp:9 IN IP4 0.0.0.0\r\na=rtpmap:111 opus/48000/2\r\na=rtpmap:0 PCMU/8000\r\na=setup:active\r\na=sendrecv\r\na=rtcp-mux\r\na=fmtp:111 minptime=10; useinbandfec=1\r\na=maxptime:60\r\na=ssrc:3140217435 cname:user2918705367@host-8692fd1\r\na=ice-ufrag:aYIP\r\na=ice-pwd:sKftuHNg7pyX0FocNO0qh/\r\na=fingerprint:sha-256 33:B4:A7:4B:89:64:D2:54:AF:6B:FE:D4:5D:EF:4E:D6:AB:6F:11:B1:E7:31:87:D6:0D:22:3F:53:83:08:B7:73\r\nm=video 1 UDP/TLS/RTP/SAVPF 100\r\na=extmap:3 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time\r\na=mid:video\r\na=rtcp:9 IN IP4 0.0.0.0\r\na=rtpmap:100 VP8/90000\r\na=rtcp-fb:100 ccm fir\r\na=rtcp-fb:100 nack\r\na=rtcp-fb:100 nack pli\r\na=rtcp-fb:100 goog-remb\r\na=setup:active\r\na=sendrecv\r\na=rtcp-mux\r\na=ssrc:2322920152 cname:user2918705367@host-8692fd1\r\na=ice-ufrag:aYIP\r\na=ice-pwd:sKftuHNg7pyX0FocNO0qh/\r\na=fingerprint:sha-256 33:B4:A7:4B:89:64:D2:54:AF:6B:FE:D4:5D:EF:4E:D6:AB:6F:11:B1:E7:31:87:D6:0D:22:3F:53:83:08:B7:73\r\nm=application 0 DTLS/SCTP 5000\r\na=inactive\r\na=mid:data\r\na=ice-ufrag:igJW\r\na=ice-pwd:skfFXPCVLtGwABgXg9xsMO\r\na=fingerprint:sha-256 33:B4:A7:4B:89:64:D2:54:AF:6B:FE:D4:5D:EF:4E:D6:AB:6F:11:B1:E7:31:87:D6:0D:22:3F:53:83:08:B7:73\r\n"}

我现在要做的是将这个对象映射到以下 POJO 类上:

导入 org.webrtc.SessionDescription;

public class User {

    private String id;

    private String response;

    private String name;

    private String room;

    private String email;

    private String sdpOffer;

    private SessionDescription sdpAnswer;

    private String userType;

    public User(){};

    public SessionDescription getSdpAnswer() {
        return sdpAnswer;
    }

    public void setSdpAnswer(SessionDescription sdpAnswer) {
        this.sdpAnswer = sdpAnswer;
    }

    public String getResponse() {
        return response;
    }

    public void setResponse(String response) {
        this.response = response;
    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getUserType() {
        return userType;
    }

    public void setUserType(String userType) {
        this.userType = userType;
    }

    public String getSdpOffer() {
        return sdpOffer;
    }

    public void setSdpOffer(String sdpOffer) {
        this.sdpOffer = sdpOffer;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getRoom() {
        return room;
    }

    public void setRoom(String room) {
        this.room = room;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }
}

到目前为止,我已尝试将消息转换为 JSONObject JSONObject j = new JSONObject(message); 并从 JSONObject 填充我自己的对象,但没有成功。 如何将字符串映射到 User 类?

编辑: 消息以这种方式从 Node.js 服务器通过 socket.IO: 在节点服务器中,我通过send.("new message",JSON.stringfy("sdpAnswer":sdpAnswer)); 发送消息 在 android 客户端上,我是这样读的:

LoginActivity.mSocket.on("new message", new Emitter.Listener() {

            @Override
            public void call(Object... args) {
                Log.i( TAG, "message back:received ");
             JSONObject j = new JSONObject(args[0]); // this throws an error
                   Object = new JSONObject(args[0].toString());
                    Log.i(TAG, "The received string is " + obj.toString()); //this throws java.lang.error can not convert from string to json object


}
)};

【问题讨论】:

标签: java android json socket.io mapping


【解决方案1】:

使用Gson

    String jsonString = "{jsonstringhere}";
    User user= new Gson().fromJson(jsonString, User.class);

【讨论】:

    【解决方案2】:

    使用 Gson 库。

    添加对build.gradle文件的依赖。

    compile 'com.google.code.gson:gson:2.8.0'
    

    并将 json 解析为对象:

    Gson gson = new Gson();
    User user= gson.fromJson(message, User.class);
    

    【讨论】:

    • 已经尝试过:java.lang.IllegalStateException: 预期 BEGIN_OBJECT 但在第 1 行第 2 列是 STRING
    • 私人 SessionDescription sdpAnswer;是对象,但在你的 json 中它是一个字符串
    • 我已经尝试过直接使用对象,但它会引发另一个错误
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-15
    相关资源
    最近更新 更多