(译者注:DouglasCrockford是Web开发领域最知名的技术权威之一,ECMAJavaScript2.0标准化委员会委员。被JavaScript之父BrendanEich称为JavaScript的大宗师(Yoda)。曾任Yahoo!资深JavaScript架构师,现任PayPal高级JavaScript架构师。他是JSON、JSLint、JSMin和ADSafe的创造者,也是名著《JavaScript:TheGoodParts》(中文版《JavaScript语言精粹》)的作者。撰写了许多广为流传、影响深远的技术文章,包括“JavaScript:世界上最被误解的语言”。DouglasCrockford曾在著名的Lucasfilm电影公司任技术总监;在Paramount(派拉蒙)公司任新媒体高级总监;communities社区创始人兼CEO;State软件公司CTO。2012.05.14,Paypal宣布DouglasCrockford加入Paypal。)
同样,让我们来把Java对象转成JSON。
1
2
3
4
5
6
7
8
JsonjsonObj=newJson();
JSONObjectjson;
System.out.println("ConvertJavaobjecttoJSONformatandsavetofile");
try(FileWriterwriter=newFileWriter("c:json-lib.json")){
json=JSONObject.fromObject(jsonObj);
json.write(writer);
}catch(IOExceptione){
}
JSON转Java对象
1
2
3
4
5
System.out.println("ReadJSONfromfile,convertJSONstringbacktoobject");
try(BufferedReaderreader=newBufferedReader(newFileReader("c:json-lib.json"))){
jsonObj=(Json)JSONObject.toBean(JSONObject.fromObject(reader),Json.class);
}catch(IOExceptionex){
}
这里有个问题,这些依赖关系会影响到性能吗?文章在下面揭晓。
(4)使用Flexjson类库
Flexjson是一个轻量级的库,能序列化和反序列化Java对象和JSON,允许深层和浅层对象的拷贝。深度拷贝意味着一个被Flexjson序列化的对象,它能让对象做到类似于延迟加载(lazy-loading)的技术,能让我们在对对象有需要时才提取。当我们想把整个对象写入到文件时,这不是一个好的情况,但是它知道需要才去做时,这是很好的。
Flexjson下载地址:它不需要其他库就可以工作。下面是例子:Java对象转JSON。
1
2
3
4
5
6
7
JsonjsonObj=newJson();
JSONSerializerserializer=newJSONSerializer();
System.out.println("ConvertJavaobjecttoJSONformatandsavetofile");
try(FileWriterwriter=newFileWriter("c:flexjson.json")){
serializer.deepSerialize(jsonObj,writer);
}catch(IOExceptione){
}
JSON转Java对象
1
2
3
4
5
6
System.out.println("ReadJSONfromfile,convertJSONstringbacktoobject");
try(BufferedReaderreader=newBufferedReader(newFileReader("c:flexjson.json"))){
jsonObj=newJSONDeserializer<Json>().deserialize(reader);
}catch(FileNotFoundExceptione){
}catch(IOExceptione){
}
简单有效是吧!
(5)使用Json-io类库