最新消息: 新版網站上線了!!!

java map和json字符串的互轉,JSON字符串不能直接轉化為map對象

json字符串轉map,JSON字符串不能直接轉化為map對象,要想取得map中的鍵對應的值需要別的方式

java中JSON可以有兩種格式,一種是對象格式的,另一種是數組對象,

//JSON的對象格式的字符串

{"name":"JSON","address":"西安高新區","age":18}

//數組對象格式

[{"name":"JSON","address":"西安高新區","age":18}]

從上面的兩種格式可以看出對象格式和數組對象格式唯一的不同則是在對象格式的基礎上加上了[],再來看具體的結構,可以看出都是以鍵值對的形式出現的,中間以英文狀態下的逗號(,)分隔。

在前端和后端進行數據傳輸的時候這種格式也是很受歡迎的,后端返回json格式的字符串,前臺使用js中的JSON.parse()方法把JSON字符串解析為json對象,然后進行遍歷,供前端使用。

要想實現JSON和java對象之間的互轉,需要借助第三方jar包,這里使用json-lib這個jar包,下載地址為:https://sourceforge.net/projects/json-lib/,json-lib需要

commons-beanutils-1.8.0.jar、

commons-collections-3.2.1.jar、

commons-lang-2.5.jar、

commons-logging-1.1.1.jar、

ezmorph-1.0.6.jar五個包的支持,可以自行從網上下載

json-lib提供了幾個類可以完成此功能,例,JSONObject、JSONArray。從類的名字上可以看出JSONObject轉化的應該是對象格式的,而JSONArray轉化的則應該是數組對象(即,帶[]形式)的。

一、定義一個java實體類

java普通對象指的是java中的一個java bean,即一個實體類,如,

package com.cn.study.day3;
public class Student {
    //姓名
    private String name;
    //年齡
    private String age;
    //住址
    private String address;
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getAge() {
        return age;
    }
    public void setAge(String age) {
        this.age = age;
    }
    public String getAddress() {
        return address;
    }
    public void setAddress(String address) {
        this.address = address;
    }
    @Override
    public String toString() {
        return "Student [name=" + name + ", age=" + age + ", address="
                + address + "]";
    }
}


二、map和json字符串的互轉

1、map轉json字符串

public static void mapToJSON(){
        Student stu=new Student();
        stu.setName("JSON");
        stu.setAge("23");
        stu.setAddress("中國上海");
        Map<String,Student> map=new HashMap<String,Student>();
        map.put("first", stu);
        
        //1、JSONObject
        JSONObject mapObject=JSONObject.fromObject(map);
        System.out.println("mapObject"+mapObject.toString());
        
        //2、JSONArray
        JSONArray mapArray=JSONArray.fromObject(map);
        System.out.println("mapArray:"+mapArray.toString());
    }


打印結果,

mapObject{"first":{"address":"中國上海","age":"23","name":"JSON"}}

mapArray:[{"first":{"address":"中國上海","age":"23","name":"JSON"}}]

上面打印了兩種形式。

2、json字符串轉map

JSON字符串不能直接轉化為map對象,要想取得map中的鍵對應的值需要別的方式,

public static void jsonToMap(){
        String strObject="{\"first\":{\"address\":\"中國上海\",\"age\":\"23\",\"name\":\"JSON\"}}";
        
        //JSONObject
        JSONObject jsonObject=JSONObject.fromObject(strObject);
        Map map=new HashMap();
        map.put("first", Student.class);
        //使用了toBean方法,需要三個參數 
        MyBean my=(MyBean)JSONObject.toBean(jsonObject, MyBean.class, map);
        System.out.println(my.getFirst());
        
    }


打印結果,

Student [name=JSON, age=23, address=中國上海]

下面是MyBean的代碼,

package com.cn.study.day4;
import java.util.Map;
import com.cn.study.day3.Student;
public class MyBean {
   
    private Student first;
    public Student getFirst() {
        return first;
    }
    public void setFirst(Student first) {
        this.first = first;
    }
}

使用toBean()方法是傳入了三個參數,第一個是JSONObject對象,第二個是MyBean.class,第三個是一個Map對象。通過MyBean可以知道此類中要有一個first的屬性,且其類型為Student,要和map中的鍵和值類型對應,即,first對應鍵 first類型對應值的類型。


轉載請注明:谷谷點程序 » java map和json字符串的互轉,JSON字符串不能直接轉化為map對象

体彩25选5开奖号码