目录
1. JSONObject对应json对象,该类中的主要方法
2.JSONArray对应json对象数组,看其源码发现该类主要继承自json,并且实现了list接口,它里面主要方法有
1. 把一个map或者java对象转换成jsonobject字符串
首先声明另一篇不错的文章 点击---> 别人不错的文章
json介绍
json是一种数据转换格式,是用来保存javaScript对象的一种方式,json使用文本来表示一个js对象,本质是一个字符串。json目的就是把数据转换成字符串,然后进行网络传输,因为json数据简洁数据量少,所以现在大多使用json进行传输数据。
我们主要讲fastjson的使用,首先应该在Java工程中导入对应的fastjson.jar包,
一、使用fastjson使用JSON案例
fastjson.jar包原始下载地址:GitHub - alibaba/fastjson: A fast JSON parser/generator for Java.
点击页面中的download即可下载最新的包
用的是fastjson.jar包
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.75</version>
</dependency>
fastjson下面主要有三个类,json、JSONObject处理json中对象的类,JSONArray处理json中对象数组的类,JSON代表JSONObject和JSONArray的转化。它们之间的关系是JSONObject和JSONArray继承JSON
1. JSONObject对应json对象,该类中的主要方法
看JSONObject源码发现该类主要继承自JSON,还实现Map接口,而JSON对象当中的数据都是以键值队存在,所以底层操作都是由map实现的,
总结:JSONObject对应JSON对象,通过各种形式的get()方法获取json对象中的数据,然后通过size()、isEmpty()方法判断元素个数和判断元素是否为空,本质都是通过实现map接口并调用接口中的方法实现的
2.JSONArray对应json对象数组,看其源码发现该类主要继承自json,并且实现了list接口,它里面主要方法有
首先明确一点JsonArray对象数组中存放的是一个一个json对象 ,所以该类中的方法直接用于操作json对象,比如add()、remove()、containsALL()方法对应json对象的添加、删除、判断(用来判断list1的元素是否都在list2中存在)其内部主要是实现了list接口并调用list接口里的方法实现的
总结:与JSONObject一样,JSONArray里面也有很多get()方法,不过不常用经常使用的是getJSONObject(int index)方法,该方法表示可以获取json数组对象中指定位置的JSONObject对象,配合size()方法,可用于循环遍历JSONArray对象数组中的各个JSONObject对象,然后可以通过JSONObject对象当中的get()放啊得到json数据
3. JSON类中主要方法,观察发现该类当中方法主要是实现了JSONObject对象、JSONArray对象数组、javabean对象、json字符串之间的相互转换,最后的数据获取还是要通过JSONObject和JSONArray来实现
JSON类当中toJSONString()方法,可以实现将JSON对象装换成json字符串和javabean对象转换成json字符串
JSON类当中parseObject()方法,可以将json字符串转换成json对象或者javabean对象;该方法经过重载之后可以将json字符串转换成javabean对象(json字符串与javaBean之间的转换可以使用 TypeReference<T> 这个类,也可以使用Class这个类)
Student stu1=JSON.parseObject(jsonstr,new TypeReference<Student>(){});
Student stu1=JSON.parseObject(jsonstr,Student.class);
JSON类当中JSONArray()方法,可以将json字符串转换成json数组对象或者list<T>
JSON类当中toJSON()方法,可以将javabean对象转换成json对象,用的比较少
JSON类当中toJaveObject()方法,可以将json对象转换成javabean对象,用的比较少
对象表示为键值对,数据由逗号分隔 {"name":"a","age":"18"}
花括号保存对象
方括号保存数组 {"name":"中国","province":[ {"name":"黑龙江","city":["哈尔滨", "大庆"]}, {"name":"台湾","city":["台北", "高雄"]} ]}
2. json字符串和js对象之间的相互转换
var js={a:'hello',b:'world'}; //这是一个js对象
var json='{"a":"hello","b":"world"}' ; //这是json字符串
要实现从JSON字符串转换为JS对象,使用 JSON.parse() 方法
var log=JSON.parse('{"a":"hello","b":"world"}' ); //输出{a:'hello',b:'world'}
在fastjson中是这么做的
JSONObject obj=JSON.parseObject(js); //将json字符串转换为json对象
要实现从JS对象转换为JSON字符串,使用 JSON.stringify() 方法
var log=JSON.stringify({a:'hello',b:'world'}); //输出'{"a":"hello","b":"world"}'
1)json字符串和对象间的转换
JSON.parseObject(string参数)----》字符串转成对象
对象.toJsonString()----》对象转换成字符串
2) ison字符串和数组间的转换
JSON.parseArray(字符串名称,类名.class)---->将字符串里的内容与类里属性一一对应存入到list集合中
JSON.toJsonString()
3.自己练习 编写测试类
package jsonTest;
public class Student {
private String name;
private int age;
public Student() {
}
public Student(String name,int age){
this.name=name;
this.age=age;
}
public void setName(String name){
this.name=name;
}
public String getName(){
return name;
}
public void setAge(int age){
this.age=age;
}
public int getAge(){
return age;
}
@Override
public String toString() {
// TODO Auto-generated method stub
return "student [name="+name+" , "+"age="+age+"]";
}
}
编写测试
package jsonTest;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.TypeReference;
public class MyJson {
public static void main(String[] args) {
List<Student> list=new ArrayList<>();
Student student=new Student("小花",23);
Student student12=new Student("小名", 88);
list.add(student);
list.add(student12);
System.out.println("******* javabean对象转换成json字符串 *******");
String str1=JSON.toJSONString(student);
System.out.println(str1);
System.out.println(JSON.toJSONString(list));
System.out.println("****** json字符串转换成javabean对象*******");
//Student stu1=JSON.parseObject(str1,new TypeReference<Student>(){});
Student stu1=JSON.parseObject(str1,Student.class);
System.out.println(stu1);
System.out.println("**javaBean对象转换成jsonObject对象并获取key对应的value值");
JSONObject jsonObject1=(JSONObject)JSON.toJSON(student);
System.out.println(jsonObject1.getString("age"));
System.out.println("******jsonObject对象转换成javabean对象******");
Student student2=JSON.toJavaObject(jsonObject1, Student.class);
System.out.println(student2);
System.out.println("*******javabean对象转换成jsonArray对象******");
List<Student> stulist=new ArrayList<>();
for(int i=0;i<5;i++){
stulist.add(new Student("student"+i, i));
}
JSONArray jsonArrays=(JSONArray)JSON.toJSON(stulist);
for(int i=0;i<jsonArrays.size();i++){
System.out.println(jsonArrays.getJSONObject(i));
}
System.out.println("*****jsonArry数组对象转换成 javalist******");
List<Student> myList=new ArrayList<>();
for(int i=0;i<jsonArrays.size();i++){
Student student3=JSON.toJavaObject(jsonArrays.getJSONObject(i), Student.class);
myList.add(student3);
}
for(Student stu:myList){
System.out.println(stu);
}
System.out.println("*****jsonObject 对象转换成jsonString字符串*****");
String str4=JSON.toJSONString(jsonObject1);
System.out.println(str4);
System.out.println("*jsonString字符串转换成jsonObject 对象并获取对应的value值");
JSONObject jso1=JSON.parseObject(str1);
System.out.println(jso1.getString("name"));
System.out.println("*****jsonString字符串转换成jsonArray对象数组*****");
JSONArray jArray=JSON.parseArray(JSON.toJSONString(stulist));
for(int i=0;i<jArray.size();i++){
System.out.println(jArray.getJSONObject(i));
}
}
}
二、使用net.sf.json使用JSON案例
一篇不错的博客:net.sf.json用法
需要添加jar包
<dependency>
<groupId>net.sf.json-lib</groupId>
<artifactId>json-lib</artifactId>
<version>2.4</version>
<classifier>jdk15</classifier>
</dependency>
getXXX方法如果为null或者为空,会抛出JSONException异常。通过getXXX可以获取指定类型的Value而不需要强制转换,较为方便,
JSONObject同时提供了optXXX的方法获取name对应的value值
optXXX的方法与getXXX最大的区别是,optXXX方法可以指定默认值。
1. 把一个map或者java对象转换成jsonobject字符串
使用JSONObject.fromObject()方法可以装换成json字符串
//将map转换成json字符串
Map map = new HashMap();
map.put( "name", "json" );
map.put( "bool", Boolean.TRUE );
map.put( "int", new Integer(1) );
map.put( "arr", new String[]{"a","b"} );
map.put( "func", "function(i){ return this.arr[i]; }" );
JSONObject jObject = JSONObject.fromObject( map );
System.out.println( jObject );//将java对象转换成json
class MyBean{
private String name = "json";
private int pojoId = 1;
private char[] options = new char[]{'a','f'};
private String func1 = "function(i){ return this.options[i]; }";
private JSONFunction func2 = new JSONFunction(new String[]{"i"},"return this.options[i];");
}
JSONObject jsonObject = JSONObject.fromObject( new MyBean() );
System.out.println( jsonObject );
常用方法详解:
put()方法---向jsonObject对象里面添加键值对
optJSONobject()方法-----根据key,获取jsonObject对象当中key对应的的jsonObject对象
getJSONobject()方法-----根据key,获取jsonObject对象当中key对应的的jsonObject对象,如果key不存在会报错
optJSONArray()方法---根据key值从jsonObject对象中获取一个key对应的JSONArray的对象
getJSONArray()方法---根据key值从jsonObject对象中获取一个key对应的JSONArray的对象,如果key不存在会报错
optString()方法---根据key值从jsonObject对象中获取一个key对应的String字符串
getString()方法---根据key值从jsonObject对象中获取一个key对应的String字符串,如果key不存在会报错