Java中org.json包解析Json格式总结
org.json包是一个用来beans,collections,maps,java arrays,XML和JSON互相转换的包,主要提供JSONObject和JSONArray类,是Java常用的Json解析工具。
下载
包对象
1. JSONObject
1. 是一个无序的键/值对集合。
2. 它的表现形式是一个包裹在花括号的字符串,键和值之间使用冒号隔开,键值和键值之间使用逗号隔开。
3. 内在形式是一个使用get()和opt()方法通过键来访问值,和使用put()方法通过键来添加或者替代值的对象。
4. 值可以是任何这些类型:Boolean,JSONArray,JSONObject,Number和String,或者JOSONObject.NULL对象。
public static void jsonObjectTest() {
JSONObject jsonobj = new JSONObject("{'name':'xiazdong','age':20}");
String name = jsonobj.getString("name");
int age = jsonobj.getInt("age");
System.out.println("name = " + name + ",age = " + age);
}
private static String prepareJSONObject() {
JSONObject studentJSONObject = new JSONObject();
try {
studentJSONObject.put("name", "Jason");
studentJSONObject.put("id", 20130001);
studentJSONObject.put("phone", "13579246810");
} catch(JSONException e) {
e.printStackTrace();
}
return studentJSONObject.toString();
}
结果输出:
{"name":"Jason","id":20130001,"phone":"13579246810"}
2. JSONArray
同JSONObject相同属性
public static void jsonArrayTest() {
JSONArray jsonarray = new JSONArray("[{'name':'xiazdong','age':20},{'name':'xzdong','age':15}]");
for (int i = 0; i < jsonarray.length(); i++) {
JSONObject jsonobj = jsonarray.getJSONObject(i);
String name = jsonobj.getString("name");
int age = jsonobj.getInt("age");
System.out.println("name = " + name + ",age = " + age);
}
}
嵌套的JSONObject和JSONArray代码
public static void jsonObjectAndArrayTest() {
String jsonstring = "{'name':'xiazdong','age':20,'book':['book1','book2']}";
JSONObject jsonobj = new JSONObject(jsonstring);
String name = jsonobj.getString("name");
System.out.println("name" + ":" + name);
int age = jsonobj.getInt("age");
System.out.println("age" + ":" + age);
JSONArray jsonarray = jsonobj.getJSONArray("book");
for (int i = 0; i < jsonarray.length(); i++) {
String book = jsonarray.getString(i);
System.out.println("book" + i + ":" + book);
}
}
3. JSONStringer
1. 是一个用于快速构造JSON文本的工具
2. JSONWriter的子类
3. bject():开始一个对象,即添加{;enObject():结束一个对象,即添加}
4. array():开始一个数组,即添加[; endArray():结束一个数组,即添加]
5. key():表示添加一个key;value():表示添加一个value
public static void jsonStringerTest() {
JSONStringer stringer = new JSONStringer();
stringer.object().key("name").value("xiazdong").key("age").value(20).endObject();
System.out.println(stringer);
}
4. JSONTokener
它和JSONObject和JSONArray的构造函数一起使用,用于解析JSON源字符串。
public static void JSONTokenerTest() throws FileNotFoundException {
JSONObject jsonobj = new JSONObject(new JSONTokener(new FileReader(new File("1.txt"))));
System.out.println(jsonobj.getJSONObject("session").getJSONArray("signing").getJSONObject(1).getJSONObject("book").getString("title"));
}
格式转换
1. String 转换为JSON对象
public class StringToJSON {
public static void main(String[] args) throws JSONException{
//定义JSON字符串
String jsonStr = "{\"id\": 2," +
" \"title\": \"json title\", " +
"\"config\": {" +
"\"width\": 34," +
"\"height\": 35," +
"}, \"data\": [" +
"\"JAVA\", \"JavaScript\", \"PHP\"" +
"]}";
//转换成为JSONObject对象
JSONObject jsonObj = new JSONObject(jsonStr);
//从JSONObject对象中获取数据
JavaBean bean = new JavaBean();
//根据属性名称获取int型数据;
bean.setId(jsonObj.getInt("id"));
//根据属性名获取String数据;
bean.setTitle(jsonObj.getString("title"));
//根据属性名获取JSONObject类
JSONObject config = jsonObj.getJSONObject("config");
bean.setWidth(config.getInt("width"));
bean.setHeight(config.getInt("height"));
//根据属性名获取JSONArray数组
JSONArray data = jsonObj.getJSONArray("data");
for(int index = 0, length = data.length(); index < length; index++) {
}
}
}
2. JSON对象转换为String字符串
public static void main(String[] args) throws JSONException {
//创建JSONObject对象
JSONObject json = new JSONObject();
//向json中添加数据
json.put("username", "wanglihong");
json.put("height", 12.5);
json.put("age", 24);
//创建JSONArray数组,并将json添加到数组
JSONArray array = new JSONArray();
array.put(json);
//转换为字符串
String jsonStr = array.toString();
System.out.println(jsonStr);
}
最终输出结果为: [{"username":"wanglihong","height":12.5,"age":24}]
3. 集合转换为JSONArray对象
public static void main(String[] args) throws JSONException {
//初始化ArrayList集合并添加数据
List < String > list = new ArrayList < String > ();
list.add("username");
list.add("age");
list.add("sex");
//初始化HashMap集合并添加数组
Map map = new HashMap();
map.put("bookname", "CSS3实战");
map.put("price", 69.0);
//初始化JSONArray对象,并添加数据
JSONArray array = new JSONArray();
array.put(list);
array.put(map);
//生成的JSON字符串为:[["username","age","sex"],{"price":69,"bookname":"CSS3实战"}]
}
解析例子
public class OrgJsonTest {
public static String BuildJson() throws JSONException {
// JSON格式数据解析对象
JSONObject jo = new JSONObject();
// 下面构造两个map、一个list和一个Employee对象
Map map1 = new HashMap();
map1.put("name", "Alexia");
map1.put("sex", "female");
map1.put("age", "23");
Map map2 = new HashMap();
map2.put("name", "Edward");
map2.put("sex", "male");
map2.put("age", "24");
List list = new ArrayList();
list.add(map1);
list.add(map2);
Employee employee = new Employee();
employee.setName("wjl");
employee.setSex("female");
employee.setAge(24);
// 将Map转换为JSONArray数据
JSONArray ja = new JSONArray();
ja.put(map1);
System.out.println("JSONArray对象数据格式:");
System.out.println(ja.toString());
// 将Javabean转换为Json数据(需要Map中转)
JSONObject jo1 = JsonHelper.toJSON(employee);
System.out.println("\n仅含Employee对象的Json数据格式:");
System.out.println(jo1.toString());
// 构造Json数据,包括一个map和一个含Employee对象的Json数据
jo.put("map", ja);
jo.put("employee", jo1.toString());
System.out.println("\n最终构造的JSON数据格式:");
System.out.println(jo.toString());
return jo.toString();
}
/**
* 解析Json数据
*/
public static void ParseJson(String jsonString) throws JSONException,
ParseException {
JSONObject jo = new JSONObject(jsonString);
JSONArray ja = jo.getJSONArray("map");
System.out.println("\n将Json数据解析为Map:");
System.out.println("name: " + ja.getJSONObject(0).getString("name")
+ " sex: " + ja.getJSONObject(0).getString("sex") + " age: "
+ ja.getJSONObject(0).getInt("age"));
String jsonStr = jo.getString("employee");
Employee emp = new Employee();
JsonHelper.toJavaBean(emp, jsonStr);
System.out.println("\n将Json数据解析为Employee对象:");
System.out.println("name: " + emp.getName() + " sex: " + emp.getSex()
+ " age: " + emp.getAge());
}
public static void main(String[] args) throws JSONException, ParseException {
// TODO Auto-generated method stub
ParseJson(BuildJson());
}
}
运行结果:
总结
json解析的步骤:
1. 需要进行创建Gson解析器
2. 创建JSONObject对象
3. 将json数据转为为相应的数据
版权声明:本文为JAVASCHOOL原创文章,未经本站允许不得转载。