java数据转json

仅工作中使用到,现查现用,理解不到位,请持怀疑态度查看本文。如有问题请联系邮件:tyut_lb@163.com; 以便交流。

参考文章:http://www.cnblogs.com/zhou2016/p/5600770.html  文章讲解7种java和json互转的类库,以及分析性能。

                    http://blog.csdn.net/xiazdong/article/details/7059573   文章讲解json格式。


java中数据转换成json数据

这里java中数据是指: java对象, java高级数据类型(集合中的list,map等)。以及其余的数据,我不了解。
说明 :做eclipse插件开发,插件中某一模块需要将java的数据转换成json数据,并做后续处理。
            我采用Map数据格式,将我的数据组织成Map数据类型,因为这个格式是键/值格式,和json数据比较符合        
            使用的类库是Gson,全名称:google-json。需要gson-x.x.jar包。在第一个链接上可以找到,第一个链接中可以找见所有需要的json相关的jar包。

1、Map集合基本使用
public class Teacher {
	private String teaName;
	private int teaAge;
	
	public Teacher(String newName, int newAge)
	{
		this.teaName = newName;
		this.teaAge  = newAge;
	}
	
	public Map<Object, Object> toMap(){
		Map<Object, Object> teaMap = new LinkedHashMap<Object, Object>();  //我需要保证最终转换的顺序和插入顺序一致
		teaMap.put(getTeaName(), getTeaAge());
		
		return teaMap;
	}

	//以下是set和get函数
}
import com.google.gson.Gson;

public class Student {
	private String stuName;
	private int    stuAge;
	private String stuAddr;
	
	public Student(String newName, int newAge, String newAddr){
		this.stuName = newName;
		this.stuAge  = newAge;
		this.stuAddr = newAddr;
	}

	//set和get函数省略

	Map<Object, Object> stuMap = new LinkedHashMap<Object, Object>();
	public void convert(){

		Teacher tea1 = new Teacher("tea1", 20);
		stuMap.put("student1", tea1.toMap());
		
		Teacher tea2 = new Teacher("tea2", 20);
		stuMap.put("student2", tea2.toMap());
		
		Teacher tea3 = new Teacher("tea3", 20);
		stuMap.put("student3", tea3.toMap());  //嵌套Map
		
		for(Map.Entry<Object, Object> entry : stuMap.entrySet()){  
		    System.out.println("Key = " + entry.getKey() + ", value = " + entry.getValue());  //输出Map, http://blog.csdn.net/laixiaobailing/article/details/41644327
		}
		
		Gson gson = new Gson();
		//System.out.println(gson.toJson(stuMap));

	}
}

主运行:
public class TestJava {
	
	public static void main(String[] args){
		Student student1 = new Student("test1", 1, "testtest1");
		Student student2 = new Student("test2", 1, "testtest2");
		Student student3 = new Student("test3", 1, "testtest3");
		
		Map<String, Object> mapTest = new LinkedHashMap<String, Object>();
		mapTest.put("c", student1);
		mapTest.put("b", student2);
		mapTest.put("a", student3);

		student1.convert();
		
		//Gson gson = new Gson();
		//System.out.println(gson.toJson(student1.convert()));
	}
}

以上是简单地测试。现在的问题:
1、所有类库转java对象,转出来的json的key是java类中声明的成员变量。      
Gson gson = new Gson();
System.out.println(gson.toJson(tea3));
     直接转换java对象,结果是:
{"teaName":"tea3","teaAge":20}
     也就是key用成员变量。这是需要注意的。

2、如果Map声明的时候是
Map<Object, Object> tmpMap = new HashMap<Object, Object>();
     是按照字典序插入的,转化出来就是字典序,对我来说这种顺序是乱序,需要注意。如果按照插入顺序转的话,需要用LinkedHashMap();

--------------以上是java转json记录--------------下面是插件项目遇到的一些问题-------------
1、eclipse插件项目中,导入第三方jar包遇到问题    
      编译时需要能找见jar包,运行时也需要能找见jar包。一般java程序按照通用导入jar包的方式就可以编译通过,并且运行ok,但是插件运行的时候会出现问题:(   导入jar包的方法:http://www.wikihow.com/Add-JARs-to-Project-Build-Paths-in-Eclipse-(Java)   
java.lang.NoClassDefFoundError错误
      分析出现这个错误的原因是因为运行时找不见jar包,虽然已经导入了,但是编译ok,运行不行。因为在插件中输出classpath值,是没有这个jar包的,所以运行时没有这个jar包。
   
参考文章:http://blog.csdn.net/jamesjxin/article/details/46606307   文章分析为什么会出这个错误。
                  http://blog.csdn.net/taijianyu/article/details/11634881      文章列出java常见的一些异常。

     那么,插件开发中如何使用第三方库?关键还是插件开发导入jar包方式不对
参考文章:http://www.360doc.com/content/12/0221/22/7532272_188485685.shtml  文章介绍插件如何导入第三方jar
     
     导入后,依旧出现新问题:
The activator for bundle ... is invalid  //
     解决办法:  http://javeye.iteye.com/blog/797394  文章附件图片需要将当前路径 . (点) 也加入到classpath中。

     
------------- 转换结果正确------------
有其他问题可以参考一下
插件开发了解到的一个博客: http://blog.csdn.net/soszou/article/details/7854514
java json相关的一个博客: http://blog.csdn.net/lk_blog/article/details/7685347




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值