到这里,我们学习了如何用例JSON-JAVA来构建JSON数据和解析JSON。其实整个过程,看起来,使用也不是很方便是不是。确实,基于json.org的解析和构造看起来很原始,但是确实需要我去了解和学习。在前面解析的基础之上,这里插入一个经常使用的小技巧。
1.解析之前,先进行为空判断
import java.io.File;
import java.io.IOException;
import org.apache.commons.io.FileUtils;
import org.json.JSONArray;
import org.json.JSONObject;
public class ReadJSON {
public static void main(String[] args) throws IOException {
//获取文件路径并加载
File file = new File("./test.json");
//通过 commons-io 里方法读取文件内容
String content = FileUtils.readFileToString(file, "utf8");
//转换JSON对象进行处理
JSONObject jsonObject = new JSONObject(content);
if(jsonObject.isNull("address")){
System.out.println("该JSON文件不存在address这个key字段");
}
if(!jsonObject.isNull("name")){
//根据getString()获取姓名
System.out.println("姓名是:"+jsonObject.getString("name"));
}
//根据getDouble()获取年龄
System.out.println("年龄:"+jsonObject.getDouble("age"));
//获取是否有女朋友
System.out.println("是否有女朋友:"+jsonObject.getBoolean("has_girlfriend"));
//把json数组对象转换成Java的数组对象
JSONArray jsonarray = jsonObject.getJSONArray("major");
//变量专业
for(int i=0; i<jsonarray.length(); i++){
System.out.println("专业-"+(i+1)+":"+ jsonarray.get(i));
}
}
}
上面插入了为空和不为空判断。当我们想根据一个key来获取对应的value的时候,最后先进行下不为空的判断,然后才去获取。毕竟JSON数据有时候来源网络,可能存在字段丢失或者不准确的情况,如果本来就不准确,那么获取剩下的信息就没有意义。
总结:
利用json.org构造JSON对象和commons-io进行解析JSON数据就介绍到这里。其实关于JSON解析,开源工具还有其他的,例如Google的GSON,和阿里巴巴的Fast json。这里举例阿里巴巴的Fast json在github上的地址:https://github.com/alibaba/fastjson,这个github有1万多个star,说明还是很出名的。接下来后面的文章,我打算介绍阿里巴巴的fast json的基本使用,你会发现要比json.org要简单很方便,强大很多。