定义:JSON是一种与开发语言无关的,轻量级的数据格式,全称是Javascript Object Notation(JS对象标记)。也就是说,JSON只是一种数据格式或者说是规范。
原理:
JSON-java最重要的类有三个。
JSONObject : 包装一个map。 用来表示一个{k:v,k2:v2,k3:[1,2]}形式的json数据
JSONArray :包装一个ArrayList。用来表示一个[1,2,{k:v}]形式的json数据
JSONTokener:包装一个Reader。用来存储、读取、操作一个表示JSON数据的字符串
过程:
1、JSONObject和JSONArray都可以用一个JSONTokener作为构造参数去实例化。
2、解析时可能会产生多个JSONObject或者JSONArray。但是他们都是操作同一个JSONTokener。
3、JSONObject和JSONArray可以分别通过JSONTokener提供的方法解析出对方。可以实现嵌套
JSON的规则: 对象是一个无序的 “ ‘名称/值’ 对” 集合。一个对象以“{”(左括号)开始,“}”(右括号)结束。每个“名称”后跟一个“:”(冒号);“‘名称/值’ 对”之间使用“,”(逗号)分隔。
标准的JSON数据表示:
数据结构:
Object:使用花括号{}包含的键值对结构,key必须为string类型,value可以为任何类型或数据结构。
Array:使用中括号[]来起始,并用逗号来分隔元素。
基本数据类型
String,number,true,false,null
优点:易于人的阅读与编写,易于程序解析与生产。
例子:
{
“name”:“汪洋”,
“Mayjor”:[“数学”,“语文”,“英语”],
“学习好”:true
}
JSON在Java中的使用:
首先需要导入各种包:
json-lib-2.3-jdk15.jar commons-beanutils-1.7.0.jar commons-httpclient-3.1.jar commons-lang-2.3.jar commons-logging-1.0.4.jar commons-collections-3.1.jar
这些包可以在这个链接下载:http://download.csdn.net/download/qq_31126879/9414430
对了,别忘了在开头同时需要import org.json.*(导入json各种包,比如,import org.json.JSONObject)
建立JSON对象:
JSOObject json = new JSONObject();
json.put(String,Object)
从文本中读入JSON对象:
File file = new File(ReadJSONSample.class.getResource("/Wangxiaoer.json"));
String content = FileUtils.readFileToString(file)
JSONObject jsonobject = new JSONObject(content)
可执行代码:
package com.zhiwenwu.json0;
import net.sf.json.JSONException;
import net.sf.json.JSONObject;
//import org.json.JSONObject;
public class JsonObjectSample{
public static void main(String[] args){
jSONObject();
}
private static void jSONObject(){
JSONObject wangxiaoer = new JSONObject();//new一个JSONObject对象,命名为wangxiaoerObject nullObj = null; //解决put中因二义性引起的编译错误
try{
wangxiaoer.put("name","王小二");
wangxiaoer.put("age",25.2);
wangxiaoer.put("birthday","1990-01-01");
wangxiaoer.put("school","蓝翔");
wangxiaoer.put("major",new String[] {"理发","挖掘机"});
wangxiaoer.put("has_girlfriend",false);
wangxiaoer.put("car",1);
wangxiaoer.put("house",1);
System.out.println(wangxiaoer.toString());//输出JSON格式的wangxiaoer数据
}catch(JSONException e){
e.printStackTrace();
}
}
}