JS和Java中,对于Json对象、Java对象和Json字符串之间的相互转化

新入职的公司需要用json操作,网上查了很多资料,这里总结一下,这是我第一篇博客啊:

Json需要的jar包:

   JSON包:https://sourceforge.net/projects/json-lib/

依赖包:

javaBean对象:

package bean;
import java.util.List;

public class MyClass {
    public int count ;//人数
    public String classNum ;//班级编号
    public List students; //学生姓名

    public MyClass(int count, String classNum, List students) {
        this.count = count;
        this.classNum = classNum;
        this.students = students;
    }

    public int getCount() {
        return count;
    }

    public void setCount(int count) {
        this.count = count;
    }

    public String getClassNum() {
        return classNum;
    }

    public void setClassNum(String classNum) {
        this.classNum = classNum;
    }

    public List getStudents() {
        return students;
    }

    public void setStudents(List students) {
        this.students = students;
    }
}

一、Json字符串转Json对象;

//Json字符串转Json对象
String jsonStr = "{'name':'jsName','age':18,'family':['mother','father','sister']}";
JSONObject jsonObject1 = JSONObject.fromObject(jsonStr);
System.out.println(jsonObject1.getString("name"));
System.out.println(jsonObject1.getInt("age"));
System.out.println(jsonObject1.getJSONArray("family").get(0));

输出:

二、Java对象转Json对象

List<String> class1 = new ArrayList<>();
class1.add("C1");
class1.add("C2");
class1.add("C3");
MyClass myClass1 = new MyClass(3,"G418",class1);

List<String> class2 = new ArrayList<>();
class2.add("C1");
class2.add("C2");
class2.add("C3");
MyClass myClass2 = new MyClass(3,"G417",class2);

JSONObject jsonObject2 = JSONObject.fromObject(myClass1);
System.out.println(jsonObject2);
System.out.println(jsonObject2.getString("classNum"));

输出:

属性名作为Json的key,属性值作为value;值为集合时,转为Json数组保存

//Java集合对象转JsonArray对象
List<MyClass> myClassList = new ArrayList<>();
myClassList.add(myClass1);
myClassList.add(myClass2);

JSONArray jsonArray = JSONArray.fromObject(myClassList);
System.out.println(jsonArray);
System.out.println(jsonArray.get(0));
System.out.println(((JSONObject)jsonArray.get(0)).getString("classNum"));

System.out.println("==========================");
for (int i = 0;i<jsonArray.size();i++){
    JSONObject object = (JSONObject) jsonArray.get(i);
    System.out.println(object);
}

Java集合对象可以通过JSONArray对象的formObject方法转化为JSONArray对象;

输出:


Json对象也可以直接添加成员:

JSONObject jsonObject = new JSONObject();
jsonObject.put("name","theGirl");
jsonObject.put("age",18);
jsonObject.put("array1",jsonArray);//前面得到的JSONArray对象
jsonObject.put("array2",myClassList);
System.out.println(jsonObject.getString("name"));
System.out.println(jsonObject.getInt("age"));
System.out.println(jsonObject.getJSONArray("array1"));//put一个JSONArray对象
System.out.println(jsonObject.getJSONArray("array2"));//也可以直接put一个java集合对象,会自动转为数据保存

输出:

put一个map:

Map<String,Object> map = new HashMap<>();
map.put("book1","java编程思想");
map.put("book2","java并发编程");
map.put("book3","java设计模式");
jsonObject.put("map",map);//map 会保存为json对象类型

System.out.println(jsonObject.get("map"));

输出:

如果put一个map对象为json对象的value,则会保存为json对象类型。

三、JSON对象·转JAVA对象:

//Json对象转化为Java对象
//常用这两种方式,和其他方式的区别还没去具体研究,api比较复杂,看不下去
//方式一
MyClass myClass = (MyClass) JSONObject.toBean(jsonObject2,MyClass.class);
System.out.println(myClass);
System.out.println(myClass.getClassNum());

System.out.println("==========================");
//方式二
Map<String,Object> configMap = new HashMap<>();
configMap.put("count",String.class);
configMap.put("classNum",Integer.class);
configMap.put("students",List.class);
MyClass myClass3 = (MyClass) JSONObject.toBean(jsonObject2,MyClass.class,configMap);
System.out.println(myClass3);

输出:

JSONArray对象转JAVA数组和JAVA集合对象:

//JSONArray对象转为Java数组或者java集合对象
System.out.println();
System.out.println(JSONArray.toCollection(jsonArray));
System.out.println("=======================");
System.out.println(JSONArray.toCollection(jsonArray,MyClass.class));

输出:



JS中Json对象和JS对象之间的相互转化:

JSON字符串转JS对象:

//Json字符串转化为Js对象
var jsonStr = '{"name":"ly","age":18,"family":["mother","father","sister"]}'

document.write("jsonStr: "+jsonStr+"<br>");//jsonStr: {"name":"ly","age":18,"family":["mother","father","sister"]}

var jsonObj = JSON.parse(jsonStr);
var jsonObj2 = eval("("+jsonStr+")") //这种方式不安全eval会执行json串中的表达式
document.write("jsonObj: "+jsonObj.age+"<br>") //jsonObj: 18
document.write("jsonObj2: "+jsonObj2.name+"<br>") //jsonObj2: ly
document.write("jsonObj2.family[0]: "+jsonObj2.family[0]+"<br>") //jsonObj2.family[0]: mother

document.write("================================="+"<br>");

注意事项:

JSON.parse()

JSON 通常用于与服务端交换数据。

在接收服务器数据时一般是字符串。

我们可以使用 JSON.parse() 方法将数据转换为 JavaScript 对象。

语法

JSON.parse(text[, reviver])

参数说明:

  • text:必需, 一个有效的 JSON 字符串。
  • reviver: 可选,一个转换结果的函数, 将为对象的每个成员调用此函数。

我们可以启用 JSON.parse 的第二个参数 reviver,一个转换结果的函数,对象的每个成员调用此函数。

实例

var text = '{ "name":"Runoob", "initDate":"2013-12-14", "site":"www.runoob.com"}';
var obj = JSON.parse(text, function (key, value) {
    if (key == "initDate") {
        return new Date(value);
    } else {
        return value;
    }});
JS中JSON的语法:

JSON 对象使用在大括号({})中书写。

对象可以包含多个 key/value(键/值)对。

key 必须是字符串,value 可以是合法的 JSON 数据类型(字符串, 数字, 对象, 数组, 布尔值或 null)。

key 和 value 中使用冒号(:)分割。

每个 key/value 对使用逗号(,)分割

解析函数

JSON 不允许包含函数,但你可以将函数作为字符串存储,之后再将字符串转换为函数

var text = '{ "name":"Runoob", "alexa":"function () {return 10000;}", "site":"www.runoob.com"}';
var obj = JSON.parse(text);

document.write(obj.alexa+"<br>") //function () {return 10000;}
obj.alexa = eval("("+obj.alexa+")")
document.write(obj.alexa()+"<br>") //10000 这里相当于调用函数


JS对象转JSON字符串:

JSON.stringify()

JSON 通常用于与服务端交换数据。

在向服务器发送数据时一般是字符串。

我们可以使用 JSON.stringify() 方法将 JavaScript 对象转换为字符串。

语法

JSON.stringify(value[, replacer[, space]])

参数说明:

  • value:

    必需, 一个有效的 JSON 对象。

  • replacer:

    可选。用于转换结果的函数或数组。

    如果 replacer 为函数,则 JSON.stringify 将调用该函数,并传入每个成员的键和值。使用返回值而不是原始值。如果此函数返回 undefined,则排除成员。根对象的键是一个空字符串:""。

    如果 replacer 是一个数组,则仅转换该数组中具有键值的成员。成员的转换顺序与键在数组中的顺序一样。当 value 参数也为数组时,将忽略 replacer 数组。

  • space:

    可选,文本添加缩进、空格和换行符,如果 space 是一个数字,则返回值文本在每个级别缩进指定数目的空格,如果 space 大于 10,则文本缩进 10 个空格。space 有可以使用非数字,如:\t。

//将JS对象转化为JSON字符串
var jsonObj = {"name":"yly","age":18};

var jsonStr2 = JSON.stringify(jsonObj);
document.write(jsonObj+"  "+typeof jsonObj+"<br>") //[object Object]   object
document.write(jsonStr2+"  "+typeof jsonStr2+"<br>") //{"name":"yly","age":18}   string

注意:

JSON 不能存储 Date 对象。

JSON.stringify() 会将所有日期转换为字符串。

jsonObj.date = new Date();
jsonStr2 = JSON.stringify(jsonObj)
document.write(jsonObj.date+"<br>") // Sun Mar 18 2018 23:26:26 GMT+0800
document.write(jsonStr2+"<br>") //{"name":"yly","age":18,"date":"2018-03-18T15:26:26.854Z"}

date自动存储在字符串;

JSON 不允许包含函数,JSON.stringify() 会删除 JavaScript 对象的函数,包括 key 和 value。

var obj = {
    "name": "Runoob", "alexa": function () { return 10000;}, "site": "www.runoob.com"
};
var myJSON = JSON.stringify(obj);
document.write(myJSON+"<br>") //{"name":"Runoob","site":"www.runoob.com"}

obj.alexa = obj.alexa.toString();
myJSON = JSON.stringify(obj)
document.write(myJSON+"<br>") //{"name":"Runoob","alexa":"function () { return 10000;}","site":"www.runoob.com"}

以上相互转化介绍结束。

下面结束Jquery如何操作json:

$(function() {
    var json = [{"name":"yly"},{"name":"ljy"},{"name":"dzq"}];

    $.each(json, function(idx, obj) {
        alert(idx+"---"+obj.name);
    });

    var jsonStr = '{"name":"wyt","age":18}';
    alert(jsonStr);
    var jsonObj = $.parseJSON(jsonStr);
    alert(typeof jsonObj+"  "+jsonObj.name)

});



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值