仅工作中使用到,现查现用,理解不到位,请持怀疑态度查看本文。如有问题请联系邮件: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