JSON解析类可以分为以下几个类
- JSONObject:可以看作是一个json对象,这是系统中有关JSON定义的基本单元,其包含一对儿(Key/Value)数值。它对外部(External: 应用toString()方法输出的数值)调用的响应体现为一个标准的字符串(例如:{"JSON": "Hello, World"},最外被大括号包裹,其中的Key和Value被冒号":"分隔)。其对于内部(Internal)行为的操作格式略微,例如:初始化一个JSONObject实例,引用内部的put()方法添加数值:newJSONObject().put("JSON", "Hello, World!")。Value类型包括:Boolean、JSONArray、JSONObject、Number、String或者默认值JSONObject.NULL object 。
- JSONStringer:json文本构建类,根据官方的解释,这个类可以帮助快速和便捷的创建JSON text。其最大的优点在于可以减少由于 格式的错误导致程序异常,引用这个类可以自动严格按照JSON语法规则(syntaxrules)创建JSON text。每个 JSONStringer实体只能对应创建一个JSON text。
- JSONArray:它代表一组有序的数值。将其转换为String输出(toString)所表现的形式是用方括号包裹,数值以逗号”,”分隔,例如:[value1,value2,value3]。这个类的内部同样具有查询行为, get()和opt()两种方法都可以通过index索引返回指定的数值,put()方法用来添加或者替换数值。value类型可以包括:Boolean、JSONArray、JSONObject、Number、String或者默认值JSONObject.NULLobject。
- JSONTokener:json解析类
- JSONException:json中用到的异常
示例:
- 用JSONObject构建json
<span style="font-size:18px;">public StringcreateJson(){
try{
JSONObject jsonObject=newJSONObject();
jsonObject.put("id","1");
jsonObject.put("name","李磊");
jsonObject.put("age",30);
return jsonObject.toString();
}catch(Exception e){
e.printStackTrace();
}
return "";
}</span>
得到的json数据为:
{"id":"1","name":"李磊","age":"30"}
- 用JSONArray构建json数组
<span style="font-size:18px;">public String createJson() {
List<Person> persons = getTestValues();
try {
JSONObjectjsonObject = new JSONObject();
JSONArrayarray = new JSONArray();
for (int i = 0;i < persons.size(); i++) {
JSONObject person = new JSONObject();
Person p= persons.get(i);
person.put("id", p.getId());
person.put("name", p.getName());
person.put("age", p.getAge());
array.put(person);
}
jsonObject.put("persons", array);
System.out.println(jsonObject.toString());
returnjsonObject.toString();
} catch(Exception e) {
// TODOAuto-generated catch block
e.printStackTrace();
}
return"";
}</span>
得到这样的数据
{"persons":[{"id":"1","age":"30","name":"李磊"},{"id":"2","age":"25","name":"韩梅梅"}]}
- 用JSONStringer构建json
<span style="font-size:18px;">public String createJson() {
JSONStringerjsonStringer = new JSONStringer(); //新建JSONStringer对象
try {
jsonStringer.object(); //调用object()方法说明开始创建添加了头{(当然,要和endobject成对出现)
jsonStringer.key("id").value("1"); //添加一个属性通过key("name")添加了属性了名称 通过value("value") 添加了属性的值
jsonStringer.key("name").value("李磊");
jsonStringer.key("age").value("30");
jsonStringer.endObject();//调用endobject()方法通知json创建完毕
System.out.println(jsonStringer.toString());
} catch (Exception e) {
e.printStackTrace();
}
return jsonStringer.toString();
}</span>
得到了这样的数据{"id":"1","name":"李磊","age":"30"}
- 用JSONStringer构建json数组
<span style="font-size:18px;">public String createJson() {
List<Person> persons = getTestValues();
JSONStringerjsonStringer = new JSONStringer();
try {
jsonStringer.object();//创建一个新的JSONStringer对象用来存储生成的json数据
jsonStringer.key("persons"); //调用key("persons")添加数组的key值
jsonStringer.array(); //调用array()通知系统接下来的是一个数组 (和endarray()一起出现)
for (int i =0; i < persons.size(); i++) {
Personperson = persons.get(i);
jsonStringer.object();//在循环内部通过object()方法 创建一对{} 然后将属性添加到大括号内
jsonStringer.key("id").value(person.getId());
jsonStringer.key("name").value(person.getName());
jsonStringer.key("age").value(person.getAge());
jsonStringer.endObject();
}
jsonStringer.endArray();
jsonStringer.endObject();
System.out.println(jsonStringer.toString());
} catch(Exception e) {
e.printStackTrace();
}
returnjsonStringer.toString();
}</span>
生成的字符串
{"persons":[{"id":"1","name":"李磊","age":"30"},{"id":"2","name":"韩梅梅","age":"25"}]}
解析JSON数据
- 解析一个最简单的json数据 数据为{"id":"1","name":"李磊","age":"30"}
<span style="font-size:18px;">public Person parserJson() {
// TODO Auto-generated method stub
String json ="{\"id\":\"1\",\"name\":\"李磊\",\"age\":\"30\"}";
Person person = new Person();
try {
将json字符串转换为jsonTokener对象
JSONTokener jsonTokener = newJSONTokener(json); //
此时还未读取任何json文本,直接读取就是一个JSONObject对象。
如果此时的读取位置在"name": 了,那么nextValue就是"李磊"(String)
调用jsonTokener的nextValue()方法 将json数据转换为jsonObject对象
JSONObject jsonObject = (JSONObject)jsonTokener.nextValue();
通过getString(keyname)获取需要的值
person.setId(jsonObject.getString("id"));
person.setName(jsonObject.getString("name"));
person.setAge(jsonObject.getString("age"));
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return person;
}</span>
- 解析带有数组的数据
<span style="font-size:18px;">{"persons":[{"id":"1","name":"李磊","age":"30"},{"id":"2","name":"韩梅梅","age":"25"}]}
public List<Person> parserJson() {
String json ="{\"persons\":[{\"id\":\"1\",\"name\":\"李磊\",\"age\":\"30\"},{\"id\":\"2\",\"name\":\"韩梅梅\",\"age\":\"25\"}]}";
创建一个list 用来存储解析的信息
List<Person> persons = new ArrayList<Person>();
try {
将json字符串转换为jsonTokener对象,再转换为jsonObject对象
JSONTokenerjsonTokener = new JSONTokener(json);
JSONObject jsonObject = (JSONObject)jsonTokener.nextValue();
通过getJSONArray("persons")获取json数组
JSONArray array =jsonObject.getJSONArray("persons");
for (int i = 0; i < array.length(); i++){ 通过循环解析json数组
JSONObject object =array.getJSONObject(i);
Person person = new Person();
person.setId(object.getString("id"));
person.setName(object.getString("name"));
person.setAge(object.getString("age"));
persons.add(person);
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return persons;
} </span>