日期:2014-05-19  浏览次数:20683 次

JSON与对象相互转换问题
问题不是如何使用json的工具简单的转换。

如题:需要远程去调用API,API的请求和返回都是JSON格式,但是楼主不才,在转换的时候没有寻求到一个好的方法,或者是一劳永逸的方法,希望各位高手帮忙谈谈你们的见解。

场景1:请求参数格式:
{"method":"login.doLogin","params":["username","password","location"]}

      对应java对象:

    public class LoginBean{
      private String method;
      private String username;
      private String password;
      private String location;

     // getter and setter methods
    }

场景2: 请求返回格式:
[["ID","USERNAME","PASSWORD"],["DATA_ID","DATA_USERNAME","DATA_PASSWORD"]]

第一行是标题,第二行及以后才是具体的数据,都是些数组。
         对应java对象:

    public class UserInfo{
      private String id;
      private String username;
      private String password;
     
     //getter and setter methods
    }


楼主现在使用GSON在转换那些名字匹配的对象,没有问题。但是对于这种全是数组,没有名字的JSON数组要转换和JAVA对象的属性相匹配,GSON就没有办法了。
之前想过自己定义注解去标注,但是由于没有写的太详细,所以简单的能够实现。
各位请问有没有好的办法可以解决这些,或者是各位有没有开源的工具借鉴来用用。
json javascript java

------解决方案--------------------
["username","password","location"]
这种不是json格式的,在转换前,先把这样的串整理一下吧。不管你是在类里弄还是用js弄,给它们添加上key之后再转吧。

------解决方案--------------------
{"method":"login.doLogin","params":["username","password","location"]}

method也是属性
后面["username","password","location"]中的也一样是属性,是怎么区别的
login.doLogin又用在哪了
------解决方案--------------------
看你需求是要转换复合类型的数据。可尝试封装成list或者map。
------解决方案--------------------
楼主你这个请求参数的格式只看到参数名,那个参数值在哪里啊
------解决方案--------------------
params是名,里面是值的话,里面的值对应LoginBean的哪个属性啊
------解决方案--------------------
前些日子我也专门的研究了json一天。
感觉最近遇到json问题的人挺多的。
这样,先发两个例子,最基本的json转换,你试试该,如果改不出来,回一下,我帮你写。

public class JsonToJavaBean {
public static void main(String[] args) {
String str="{\"student\":[{\"name\":\"leilei\",\"age\":23,\"gender\":true},{\"name\":\"leilei02\",\"age\":23,\"gender\":false}]}";
Student stu = null;
List<Student> list = null;
try {
ObjectMapper objectMapper=new ObjectMapper();
StudentList studentList=objectMapper.readValue(str, StudentList.class);

list=studentList.getStudent();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();

for(Student s:list){
System.out.println(s.getName()+"   "+s.getAge()+"      "+s.isGender());
}
}
}

public class JavaBeanToJson {
public static void main(String[] args) {