专栏首页强仔仔Java之json和对象之间的相互转换

Java之json和对象之间的相互转换

json使用前必须先引入json的相关jar包,我这里用的是json-lib-2.4-jdk15.jar这个版本的jar包。如果大家没有的话可以直接在我这里下载:点击打开链接

导入完jar就可以正式开始开发了,这里先看一个对象转json的例子:

对象的具体内容如下:

package myapi.json.demo.entity;
import java.util.List;
public class MyBean {
	private String Id;
	private String Name;
	private List CardNum;
	public MyBean(String id, String name, List cardNum) {
		super();
		Id = id;
		Name = name;
		CardNum = cardNum;
	}
	
	public MyBean() {
		super();
	}

	public String getId() {
		return Id;
	}
	public void setId(String id) {
		Id = id;
	}
	public String getName() {
		return Name;
	}
	public void setName(String name) {
		Name = name;
	}
	public List getCardNum() {
		return CardNum;
	}
	public void setCardNum(List cardNum) {
		CardNum = cardNum;
	}
	
}

转换的关键代码如下所示:

package myapi.json.demo;
import java.lang.reflect.InvocationTargetException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import org.apache.commons.beanutils.PropertyUtils;
import myapi.json.demo.entity.MyBean;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
public class JsonApi {
	public static void main(String[] args) throws Exception {
		List<MyBean> myBeanList = new ArrayList<MyBean>();
		List<String> cardNum1 = new ArrayList<String>();
		cardNum1.add("number1");
		cardNum1.add("number2");
		cardNum1.add("number3");
		cardNum1.add("number4");
		MyBean myBean1=new MyBean("number-1", "test-1", cardNum1);
		List<String> cardNum2 = new ArrayList<String>();
		cardNum2.add("number1");
		cardNum2.add("number2");
		cardNum2.add("number3");
		cardNum2.add("number4");
		MyBean myBean2=new MyBean("number-2", "test-2", cardNum2);
		myBeanList.add(myBean1);
		myBeanList.add(myBean2);
		JSONArray jsonArray=new JSONArray().fromObject(myBeanList);
		JSONObject jsonObject = new JSONObject();
		jsonObject.put("key", jsonArray);
		System.out.println(jsonObject);
	}
}

运行结果如下:

{"key":[{"cardNum":["number1","number2","number3","number4"],"id":"number-1","name":"test-1"},
{"cardNum":["number1","number2","number3","number4"],"id":"number-2","name":"test-2"}]}

这里需要注意的是JSONObject中必须是类似于map中key+value的类型,而JSONArray中必须是类似于list中的类似。

下面是json转对象的例子:

package myapi.json.demo;
import java.lang.reflect.InvocationTargetException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import org.apache.commons.beanutils.PropertyUtils;
import myapi.json.demo.entity.MyBean;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
public class JsonApi {
	public static void main(String[] args) throws Exception {
		List<MyBean> myBeanList = new ArrayList<MyBean>();
		List<String> cardNum1 = new ArrayList<String>();
		cardNum1.add("number1");
		cardNum1.add("number2");
		cardNum1.add("number3");
		cardNum1.add("number4");
		MyBean myBean1=new MyBean("number-1", "test-1", cardNum1);
		List<String> cardNum2 = new ArrayList<String>();
		cardNum2.add("number1");
		cardNum2.add("number2");
		cardNum2.add("number3");
		cardNum2.add("number4");
		MyBean myBean2=new MyBean("number-2", "test-2", cardNum2);
		myBeanList.add(myBean1);
		myBeanList.add(myBean2);
		JSONArray jsonArray=new JSONArray().fromObject(myBeanList);
		JSONObject jsonObject = new JSONObject();
		jsonObject.put("key", jsonArray);
		JSONArray arrayResult=jsonObject.getJSONArray("key");
		for(int i=0;i<arrayResult.size();i++){
			 JSONObject jsonResult = arrayResult.getJSONObject(i);  
			 MyBean myBeanResult= (MyBean)JSONObject.toBean(jsonResult, MyBean.class);  
			 System.out.println(myBeanResult.getName());
		}
	}
}

运行结果如下:

test-1
test-2

这里需要注意的是:只有JSONOBject中才有toBean的方法,所以想要把JSONArray中的list数据一一对应到对象中,只能先把JSOnArray对象转换为JSONObject才可以。

这里介绍的是最基本的json转对象的方法,关于如何创建json其实很简单,大部分其实都是map,list,数组,对象等进行混合组装成json数据,对于这种混合型的解析一般都是根据具体数据进行具体解析。当然最好的方式其实就是服务器通过对象直接转换为json数据,客户端通过编写相同的对象实体类,直接进行json转换对象操作就可以实现对象的解析操作,既省事又省力。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 构建 Zookeeper + Dubbo + Spring Boot 的分布式调用项目

    今天给大家介绍一下如何在SpringBoot中搭建Dubbo+Zookeeper来实现不同系统的RPC调用 这里先和大家说一下什么是RPC框架,简单的来说就是远...

    林老师带你学编程
  • 今天给大家介绍一下SpringBoot框架中URL参数如何进行Base64加密解密

    今天给大家介绍一下SpringBoot框架中URL参数如何进行Base64加密解密 首先给大家介绍一下Java中的Base64加密,其实Base64不是真正的加...

    林老师带你学编程
  • Java:如何正确地使用异常详解

    由于我们开发的项目可不是像写Demo一样轻松,这里可能会有很多层次结构。我们要在具体哪一层的什么位置是使用try-catch这个异常呢,还是把异常throw...

    林老师带你学编程
  • Iterator迭代器解决[为何禁止在foreach内增删]?

    1、对集合进行增加删除,禁止使用foreach,循环的动态操作 2、倒序遍历 3、遍历循环

    崔笑颜
  • Vue + Element UI 实现权限管理系统 前端篇(五)

    朝雨忆轻尘
  • gson解析assets目录下的json文件(给新手看的)

    AWeiLoveAndroid
  • Java编写购物车系统

    张泽旭
  • Python学习笔记(29)-Pytho

    上一篇已经介绍了python-docx模块的安装和导入,本篇直接介绍如何创建并写入word文档,需要注意的是:创建word并写入之后,操作的都是内存中的对象,最...

    py3study
  • vue填坑记录:axios 返回中文乱码问题

    以前接口都是php写的,echo 出 json 串给页面jQuery ajax用的。

    shirishiyue
  • java泛型详解

    泛型,即"参数化类型"。就是将类型由原来的具体的类型参数化,类似于方法中的变量参数,此时类型也定义成参数形式(可以称之为类型形参),然后在使用/调用时传入具体的...

    后端Coder

扫码关注云+社区

领取腾讯云代金券