Java:将JSON对象附加到JSON对象

时间:2013-12-03 09:03:00

标签: java json

我想将聊天记录存储在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

2 个答案:

答案 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库的文档来解码数据,以确定如何执行此操作。