星期六, 八月 02, 2008

在Java使用JSON对象

JSON :www.json.org 不但是用来传递结构化的数据可以大显身手,也可以在静态的properties或XML数据中显示强大的威力。

由于现在java 5已经内置的支持javascript 引擎(http://www.mozilla.org/rhino/scriptjava.html)
所以可以在Java代码中通过手工编写调用javascrit来解析JSON的数据,
比如类似下面代码:

import javax.script.*;
ScriptEngineManager factory = new ScriptEngineManager();
ScriptEngine engine = factory.getEngineByName("JavaScript");
String str = "{'string':'JSON', 'integer': 1, 'double': 2.0, 'boolean': true}";
engine.eval("a="+str);
String values= (String)engine.eval("a.string");
values里面的值为"JSON";

或者使用JSON的java类库来自(http://json-lib.sourceforge.net/)
代码如下:
这里把JSON对象放在Java的Properties里,注意,Java Properties最后一行必须是包含一个空行的独立行,否则最后一个字符将读不到,这可能是个bug或者怪癖吧。 注意下列的多行的写法,
每一行后面加入一个 \ 表示是同一行的内容.

com.test.t.properties文件里包含如下内容
DatabaseURL={\
"First":{"defaultDS":"java:/mysql","securityDS":"java:/secMysql"}, \
"Two":{"defaultDS":"java:/mysqlTwo","securityDS":"java:/secMysql"}, \
"Three":{"defaultDS":"java:/mysqlTHree","securityDS":"java:/secMysql"} \
}

import net.sf.json.*;
import java.util.ResourceBundle;
ResourceBundle t=ResourceBundle.getBundle("com.test.t");
JSONObject a=(JSONObject) JSONSerializer.toJSON( t.getString("DatabaseURL"));
JSONObject b=a.getJSONObject("First");//这是两级对象表示的方法
System.out.println(b.getString("defaultDS"));
打印结果为:java:/mysql