您的位置:首页 > 编程语言 > Java开发

Json在java中的使用

2016-04-29 09:40 405 查看
1、json的基本知识

JSON: JavaScript Object Notation(JavaScript 对象表示法)

JSON 是存储和交换文本信息的语法。类似 XML。

JSON 比 XML 更小、更快,更易解析。

2.

无需解析器,JavaScript 程序能够使用内建的 eval() 函数,用 JSON 数据来生成原生的 JavaScript 对象。

3. 数据类型(6)种

数字 123

字符串 "firstName":"John"

数组 ["firstName":"John" , "lastName":"Doe" ]

对象 { "firstName":"John" , "lastName":"Doe" }

逻辑 true / false

null null

4、使用场景:

一般用于不同语言之间的数据传递

js + java != 后台查询的数据放到list中,在转换成json才能被前台的js解析。

下面的测试用例已经覆盖了常用的格式转换

package ray.json;
import java.util.Date;
import net.sf.json.JSONObject;
import net.sf.json.JSONSerializer;
import net.sf.json.JsonConfig;
import net.sf.json.util.CycleDetectionStrategy;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Test;

public class TestJson {
public static Student student;
@BeforeClass
public static void setUpBeforeClass() throws Exception {
System.out.println("--------Before-------");
student = new Student();
}

@AfterClass
public static void tearDownAfterClass() throws Exception {
System.out.println("--------After-------");
student = null;
}

//测试默认转换,用于处理比较简单的情况,例如知道对象的类型为student
//而很多情况是不知道对象的类型的,这就需要自定义json格式或者为map(见下面testCase)
@Test
public void test1(){
student.setId(1);
student.setName("雷子诺");
System.out.println(JSONSerializer.toJSON(student));
}
@Test//测试静态字段转换
public void test2(){
student.setId(1);
student.setName("雷子诺");
student.setAge(1);
//默认情况下静态字段是不会转换为json对象的,因为静态字段是属于类,而非对象
//解决方法:自定义json格式或者转换为map
JSONObject object = new JSONObject();
object.put("Myid", student.getId());
object.put("myName", student.getName());
object.put("myAge", student.getAge());
System.out.println(object);
}
@Test // 解决自关联的问题
public void test3() {
student.setDate(new Date());
student.setName("雷子诺");
student.setAge(1);
//student.setStudent(new Student());
// 通过配置jsonConfig来过滤相应的参数
JsonConfig config=new JsonConfig();
// 设置需要排除哪些字段, 例如排除密码字段
config.setExcludes(new String[]{"date"});
// 设置如果有些字段是自关联则过滤  STRICT: 缺省值,是否自关联都要转化
// LENIENT: 如果有自关联对象,则值设置为null
// NOPROP: 如果自关联则忽略属性
config.setCycleDetectionStrategy(CycleDetectionStrategy.LENIENT);
System.out.println(JSONObject.fromObject(student, config));
}
@Test // 通过自定义日期的处理类,来格式化日期数据
public void test5() {
student.setDate(new Date());
student.setName("雷子诺");
JsonConfig config=new JsonConfig();
// 指定某个Json类型的处理方式
DataJsonValueProcessor dataValue=new DataJsonValueProcessor();
config.registerJsonValueProcessor(Date.class, dataValue);
System.out.println(JSONObject.fromObject(student, config));
}
}
看下Student类:

package ray.json;

import java.util.Date;

public class Student {
private int id;
private String name;
private static int age;
private Date date;
//自关联情况。
private Student student /*= this*/;

public Student getStudent() {
return student;
}
public void setStudent(Student student) {
this.student = student;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public static int getAge() {
return age;
}
public static void setAge(int age) {
Student.age = age;
}
public Date getDate() {
return date;
}
public void setDate(Date date) {
this.date = date;
}
@Override
public String toString() {
return "Student [id=" + id + ", name=" + name + ", date=" + date + "]";
}

}
输出结果自己跑下测试用例。

另外这里我写了下最基本的JsonArray的转换方法

package ray.json;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import net.sf.json.JSONArray;
import net.sf.json.JSONObject;

public class JSon {
public static JSONObject object = new JSONObject();

public static void main(String[] args) {
testList();
testMap();
testBean();
testArray();
testCommon();
testObject();
}
//封装到JsonObject中,在需要的地方解析Json即可
private static void testObject() {
System.out.println(object);
}

//一般数据转换成json代码
private static void testCommon() {
JSONArray jsonAry = JSONArray.fromObject("['Uno','is', '梓诺的', 'father']" );
//["Uno","is","梓诺的","father"]
System.out.println(jsonAry);
object.put("jsonCommonAry", jsonAry);
}
//数组转换成json代码
private static void testArray() {
boolean[] ary = new boolean[] { true, false, true };
JSONArray jsonAry = JSONArray.fromObject(ary);
//[true,false,true]
System.out.println(jsonAry);
object.put("jsonAry", jsonAry);
}
//Bean转为Json,注意这个Bean一定要是public的class,否则抛异常
private static void testBean() {
Student student = new Student();
student.setId(1);
student.setName("雷梓诺");
JSONObject jsonObject = JSONObject.fromObject(student);
//{"id":1,"name":"雷梓诺"}
System.out.println(jsonObject);
object.put("Bean", jsonObject);
}
//Map集合转换成json方法
private static void testMap() {
Map<String, Object> map = new HashMap<String, Object>();
map.put("name", "雷梓诺");
map.put("bool", Boolean.TRUE);
map.put("int", null);
map.put("arr", new String[] { "a", "b" });
//		map.put(null, null);//JSON keys cannot be null.
map.put("func", "function(i){ return this.arr[i]; }");
JSONObject json = JSONObject.fromObject(map);
//{"arr":["a","b"],"int":null,"name":"雷梓诺","func":function(i){ return this.arr[i]; },"bool":true}
System.out.println(json);
object.put("jsonMap", json);
}
//List集合转换成json方法
private static void testList() {
List<String> list = new ArrayList<String>();
list.add( "first" );
list.add( "second" );
JSONArray ary = JSONArray.fromObject( list );
System.out.println(ary);//["first","second"]
object.put("list", ary);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: