从字符串构建JSON字符串并使用GSon?Map〈String,String>字段

xhv8bpkk  于 2022-11-23  发布在  其他
关注(0)|答案(1)|浏览(212)

我正在尝试编写一个JSON的 Package 器来发送WebSocket消息。我创建了这个类,它允许你用一个事件名来构造,然后传递一个事件数据的关联数组。
如何在getString方法中解析JSON,如下所示:

{
    "event_name": "some event name",
    "event_data": {
        "some data": "some data value",
        "some more dat": "some more data value"
    }
}

班级:

package com.eu.websockets.events.server;

import java.util.HashMap;
import java.util.Map;

public abstract class ServerWebSocketEvent {
    private String eventName;
    private Map<String, String> eventData;

    public ServerWebSocketEvent(String eventName) {
        this.eventName = eventName;
        this.eventData = new HashMap<>();
    }

    public void addEventData(String key, String value) {
        eventData.put(key, value);
    }

    public String getString() {
        
    }
}
slsn1g29

slsn1g291#

要使字段名与JSON中的字段名不同,您需要使用@SerializedName指示该字段名,或者在本例中也可以将FieldNamingPolicy设置为Gson
因此,对于@SerializedName

@SerializedName("event_name")
    private String eventName;
    @SerializedName("event_data")
    private Map<String, String> eventData;
    ...
public String getString() {
    return new Gson().toJson(this)
}

或者使用FieldNamingPolicy,例如:

public String getString() 
    return new GsonBuilder()
        .setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES)
        .setPrettyPrinting() // This one is not needed use if you want to
        .create().toJson(this);
}

相关问题