JSONObject、JSONArray、Map、JavaBean的相互转换

时间:2022-06-08 19:03:26

1,JSONObject

  json对象,就是一个键对应一个值,使用的是大括号{ },如:{key:value}

2,JSONArray

  json数组,使用中括号[ ],只不过数组里面的项也是json键值对格式的

  Json对象中添加的是键值对,JSONArray中添加的是Json对象

import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
import org.junit.Test;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;

public class JsonTest {

public static void main(String[] args) {
//----------------JsonObject创建的方法-----------------------------------------------------------
//创建JsonObject第一种方法
JSONObject jsonObject = new JSONObject();
jsonObject.put(
"UserName", "kobi");
jsonObject.put(
"age", "34");
jsonObject.put(
"workIn", "ALI");//此处的"ALI"也可以替换为一个json{"sex":"男","station":"徐州","hoobey":"coding"}
// System.out.println("jsonObject1:" + jsonObject);//jsonObject1:{"UserName":"kobi","workIn":"ALI","age":"34"}
Iterator iterator = jsonObject.keys();//用Iterator迭代器遍历取值,建议用反射机制解析到封装好的对象中
while (iterator.hasNext()) {
String key
= (String) iterator.next();
String value
= jsonObject.getString(key);
System.
out.println(value);//输出值 kobi ALI 34
}
//创建JsonObject第二种方法
HashMap<String, String> hashMap = new HashMap<String, String>();
hashMap.put(
"UserName", "ZHULI");
hashMap.put(
"age", "30");
hashMap.put(
"workIn", "ALI");
// System.out.println("jsonObject2:" + JSONObject.fromObject(hashMap));//jsonObject2:{"UserName":"ZHULI","workIn":"ALI","age":"30"}


//----------------JSONArray创建的方法-----------------------------------------------------------
//一:遍历JsonArray
String str = "[{name:'a',value:'aa'},{name:'b',value:'bb'},{name:'c',value:'cc'},{name:'d',value:'dd'}]"; // 一个未转化的字符串
JSONArray json = JSONArray.fromObject(str); // 首先把字符串转成 JSONArray 对象
if (json.length() > 0) {
for (int i = 0; i < json.length(); i++) {
JSONObject job
= json.getJSONObject(i); // 遍历 jsonarray 数组,把每一个对象转成 json 对象
// System.out.println(job);//{"name":"a","value":"aa"} {"name":"b","value":"bb"} {"name":"c","value":"cc"}.....
// System.out.println(job.get("name")); // a b c d

}
}

//创建JsonArray方法2
ArrayList<String> arrayList = new ArrayList<String>();
arrayList.add(
"kobi");
arrayList.add(
"34");
arrayList.add(
"ALI");
//System.out.println("jsonArray2:" + JSONArray.fromObject(arrayList));//jsonArray2:["kobi","34","ALI"]


}

@Test
public void test0105() {
/*
取出name4值过程步骤: 1.将以上字符串转成JSONArray对象 2.取出对象的第一项,JSONObject 3.取出name1的值JSONObject
4.然后取出name2的值JSONObject对象 5.取出name4的值value2
*
*/
/* 记住":"前是键,符号后是值 大括号成对找 一层层拨开就清楚了*/
String str
= "[{name1:{name2:{name3:'value1',name4:'value2'}}},{}]";

JSONArray jsonArray
= JSONArray.fromObject(str);// 将结果转成JSONArray对象的形式

JSONObject getJsonObj
= jsonArray.getJSONObject(0);//获取json数组中的第一项

JSONObject json
= getJsonObj.getJSONObject("name1").getJSONObject("name2");//{"name4":"value2","name3":"value1"}
Object value = json.get("name4");
System.
out.println(value);//value2
}

@Test
public void test01051() {
JSONObject json
= new JSONObject();
JSONArray jsonArray
= new JSONArray();

json.put(
"key", "value");//JSONObject对象中添加键值对
jsonArray.put(json);//将JSONObject对象添加到Json数组中


System.
out.println(json);
System.
out.println(jsonArray);
}

}

相互转换的方法如下,可以运用到日常的工作中去:

package com.suning.crawler.util;

import net.sf.json.JSONObject;
import sun.security.util.Password;

import java.lang.reflect.Method;
import java.text.ParseException;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;

/**
* @Author: hoobey
* @Description:
* @Date: Created in 9:12 2018/1/6
* @Modified By:
* *转换器
* 1:将JavaBean 转换成Map、JSONObject
* 2:将JSONObject 转换成Map
*/
public class BeanConverter {
/**
* 将javaBean转换成Map
*
* @param javaBean javaBean
* @return Map对象
*/
public static Map<String, String> BeantoMap(Object javaBean) {
Map
<String, String> result = new HashMap<String, String>();
Method[] methods
= javaBean.getClass().getDeclaredMethods();

for (Method method : methods) {
try {
if (method.getName().startsWith("get")) {
String field
= method.getName();//getName getPassword
field = field.substring(field.indexOf("get") + 3);//Name Password
field = field.toLowerCase().charAt(0) + field.substring(1);//name password
Object value = method.invoke(javaBean, (Object[]) null);
result.put(field,
null == value ? "" : value.toString());
}
}
catch (Exception e) {
}
}

return result;
}

/**
* 将json对象转换成Map
*
* @param jsonObject json对象
* @return Map对象
*/
@SuppressWarnings(
"unchecked")
public static Map<String, String> JsontoMap(JSONObject jsonObject) {
Map
<String, String> result = new HashMap<String, String>();
Iterator
<String> iterator = jsonObject.keys();
String key
= null;
String value
= null;
while (iterator.hasNext()) {
key
= iterator.next();
value
= jsonObject.getString(key);
result.put(key, value);
}
return result;
}

/**
* 将javaBean转换成JSONObject
*
* @param bean javaBean
* @return json对象
*/
public static JSONObject toJSON(Object bean) {
return new JSONObject(BeantoMap(bean));
}

/**
* 将map转换成Javabean
*
* @param javabean javaBean
* @param data map数据
*/
public static Object toJavaBean(Object javabean, Map<String, String> data) {
Method[] methods
= javabean.getClass().getDeclaredMethods();
for (Method method : methods) {
try {
if (method.getName().startsWith("set")) {
String field
= method.getName(); //setName setPassword
field = field.substring(field.indexOf("set") + 3);//Name Password
field = field.toLowerCase().charAt(0) + field.substring(1);//name password
method.invoke(javabean, new Object[]
{
data.
get(field)
});
}
}
catch (Exception e) {
e.printStackTrace();
}
}

return javabean;
}

/**
* 将javaBean转换成JSONObject
*
* @param data javaBean
* @return json对象
* @throws ParseException json解析异常
*/
public static void toJavaBean(Object javabean, String data) throws ParseException {
JSONObject jsonObject
= new JSONObject(data);
Map
<String, String> datas = BeantoMap(jsonObject);
toJavaBean(javabean, datas);
}
}

方法调用:

package com.suning.crawler.util;
import net.sf.json.JSONObject;
import org.junit.Test;

import java.util.HashMap;
import java.util.Map;
import java.util.Set;

/**
* @Author: hoobey
* @Description:
* @Date: Created in 9:16 2018/1/6
* @Modified By:
*/
public class Test0106 {
/*javaBean转换成Map*/
@Test
public void test1(){
Map
<String, String> map = BeanConverter.BeantoMap(new Stu("hoobey","123"));
// Map<String, String> map = BeanConverter.toMap(new Stu("hoobey", "213"));
// Set<Map.Entry<String, String>> entry = map.entrySet(); //Set集合中存储的是Map.Entry<String, String> entry
//推荐使用这种map遍历 尤其是容量大的时候 map.entrySet()返回此映射中包含的映射关系的 Set视图
for(Map.Entry<String, String> entry : map.entrySet()){
System.
out.println("key="+entry.getKey()+",value="+entry.getValue());
}
}

/* * 将json对象转换成Map*/
@Test
public void test2(){

JSONObject json
=new JSONObject();
json.put(
"hoobey","123"); //{"hoobey":"123"}
Map<String, String> toMap = BeanConverter.JsontoMap(json);
for(Map.Entry<String, String> entry : toMap.entrySet()){
System.
out.println("key="+entry.getKey()+",value="+entry.getValue());
}
}

/*将javaBean转换成JSONObject*/
@Test
public void test3(){
JSONObject toJSON
= BeanConverter.toJSON(new Stu("hoobey", "123"));
System.
out.println(toJSON);//{"password":"123","name":"hoobey"}
}

/*将map转换成Javabean map中存放的键值一定和bean相对应*/
@Test
public void test4(){
Map
<String, String> map = new HashMap<String, String>();
map.put(
"name","hoobey");
map.put(
"password","123");
Object o
= BeanConverter.toJavaBean(new Stu(), map);
System.
out.println(o);//Stu{name='hoobey', password='123'}
}
}