我想将聊天记录存储在JSON对象中,每个对话一个对象,在这个对象中我希望有一个包含所有消息的数组。
像这样:
{"Channel_123":[
{"from":"john","to":"bill", "msg":"Hello", "time":"09:57"},
{"from":"bill","to":"john", "msg":"Hey John", "time":"09:58"}
]
}, {"Channel_234":[
{"from":"bob","to":"judy", "msg":"Hello", "time":"10:37"},
{"from":"judy","to":"bob", "msg":"Hey!", "time":"10:38"}
]
}
我当前的方法如下所示:(字符串channel
包含上面说明的会话ID Channel_234
JSONObject obj = new JSONObject();
JSONObject msgObj = new JSONObject();
public void addMessage(String from, String to, String msg, String time, String channel) {
try {
msgObj.put("from", from);
msgObj.put("to", to);
msgObj.put("msg", msg);
msgObj.put("time", time);
obj.put(channel, array);
} catch (Exception ex) {
System.out.println(ex.getStackTrace());
logger.log(Level.SEVERE, "Exception: ", ex);
}
System.out.println(obj);
}
但由于某种原因,该方法不会附加到对象上,而是覆盖之前存在的对象。
有什么想法吗?
修改
我正在使用简单的json lib:json-simple-1.1.1.jar
答案 0 :(得分:1)
我不熟悉jason-simple API,但您应为每个项目创建JSONObject
的新实例。
private JSONObject createMesssage(String form, String to, String msg, String time) throws Exception {
JSONObject jsonMessage= new JSONObject();
jsonMessage.put("from", from);
jsonMessage.put("to", to);
jsonMessage.put("msg", msg);
jsonMessage.put("time", time);
return jsonMessage;
}
JSONObject obj = new JSONObject();
private void addMessage(String channel, JSonObject messsage) throw Exception {
obj.put(channel, message);
}
public void saveMessage(String form, String to, String msg, String time, Striing channel ) {
try {
addMessage(chanell,createMessage(form,to,msg,time));
} catch (Exception ex) {
logger.log(Level.SEVERE, "Exception: ", ex);
}
}
答案 1 :(得分:0)
有效的JSON数据表示不会复制相同嵌套级别的键。请记住,只有数字,字符串,null,对象和数组是有效的JSON原语,您有一些结构,如:
[
{
...
"id_str" : "foo",
...
},
{
...
"id_str" : "bar",
...
},
...
]
这是一个JSON对象数组。在这种情况下,您必须索引数组的第4个元素,然后索引该对象的“id_str”属性。查看您正在使用的任何JSON库的文档来解码数据,以确定如何执行此操作。