将Python字典迁移到Java和JSON
我之前在Python方面还算不错,但现在我被迫要为我的聊天应用做一个Wowza模块。这个应用会通过Facebook账号登录,每个用户的状态会保存在Wowza服务器上,而这个服务器是用Java开发的,通过Flash客户端和RTMP连接。在线状态的数据结构在Python中大概是这样的。
请告诉我在Java中怎么表示这个数据结构,我对Java中的变量“类型”不太熟悉 :(
x = {
10001: {
'status': 0,
'friends': {}
},
10002: {
'status': 1,
'friends': {
10001: 0,
10003: 1
}
},
10003: {
'status': 1,
'friends': {
10001: 0,
10003: 1
}
}
}
10001、10002等是Facebook用户的ID,而0和1则表示他们的在线/离线状态。如果10001在线,数据结构会有一些小的修改,它会把10001的状态改为1,并添加他所有朋友的ID,这些ID是从Facebook获取的,同时也会更新他们的状态。
x = {
10001: {
'status': 1,
'friends': {
10002: 1,
10003: 1
}
},
10002: {
'status': 1,
'friends': {
10001: 1,
10003: 1
}
},
10003: {
'status': 1,
'friends': {
10001: 1,
10003: 1
}
}
}
如果用户10001断开连接,数据结构会回到之前的状态。我可以把它存储为一个JSON对象吗?或者有没有什么简单的方法来存储和获取数据?
3 个回答
这要看你想做什么了...
如果你能使用像Google Gson这样的json库,那就太好了,它可以很好地帮助你在Java中处理JSON数据。
如果你想自己写代码,只处理整数和字符串,那其实也不算太难...
JSON的结构其实就是一个数组或者一个键值对的映射,其中键是一个字符串,值可以是简单的值,也可以是复杂的值,比如一个哈希表或者一个数组...
总之,通常直接使用Gson会更简单一些;)
我猜你说的“存储和检索”是指把数据缓存到内存里。那么:
(1) 首先,创建一些javabean类来封装数据。Java中的HashMap和Python中的字典很相似。你可以试着用Java写这些类,就像用Python那样,然后把结果更新到你的问题里,这样大家就能帮你解决一些细节问题,比如Java中的泛型,这在Python中是没有直接对应的。
(2) 使用一些现有的对象和JSON之间转换的框架,把实例转换成JSON格式,或者从JSON格式转换回来。Gson和Jackson是比较流行的选择。
我只需要这个http://www.json.org/javadoc/org/json/JSONObject.html库就可以了。
我可以用它来做一些简单的操作,比如给每个对象添加'type',但是不能像在Python里那样一步到位地创建整个树结构。
谢谢mandubian和jtoberon :))
import net.sf.json.JSONException;
import net.sf.json.JSONObject;
public class JSONExample {
JSONObject json;
JSONObject objJSON;
JSONObject objObjJSON;
public void addtoJSON(){
json = new JSONObject();
objJSON= new JSONObject();
objObjJSON =new JSONObject();
//adding last tree
objObjJSON.put(10001, 0);
objObjJSON.put(10002, 1);
//adding secondary tree
objJSON.put("status",1);
objJSON.put("friends",objObjJSON);
//added root tree
objJSON.put(10003,objJSON);
System.out.println("JSON is " + objJSON);
}
}