如果你是在安卓开发中并且使用android studio,要使用json来作为数据传输的格式,那么下面是我的一些经验。
一开始我在android studio中导入那6个包,那6个包找了非常久,因为放在android studio项目的lib目录下之后,不是编译错就是运行错。

编译错通常是这两种情况:

1.代码那里爆红,说明你导入包都还没有成功
2.1解决了,但是和andorid studio自带的json包冲突,也就是类或者函数什么的重复,也就是duplicate class。

解决2的时候,我的错误做法
我按照编译的那个错误日志删除6个包中的那些重复包,直到编译通过,但是却又发生了运行错,又说类找不到(真晕,前面说重复,删了,又说类找不到)class not found。
解决2的办法
删除那6个包,下载比较新版本的那6个包,并导入,就不会冲突。
下面提供两种方法得到较新版本的6个包:
方法一,下面是我上传的,只需要很少积分,1个就可以了。
json6个包下载地址
方法二,由于json的那6个包还算主流,可以在andorid studio中直接下载,很方便。操作如下:
在这里插入图片描述
在这里插入图片描述
在这里你可以简略搜索,输入关键词的就可以了,如下图
在这里插入图片描述
然后依次下载那6个包的新版之后,在这里下载操作的好处就是android studio会自动帮你导入,你只管在代码中使用就行了。一般下载的时候选择的版本选择第一个就行了,比如上面排在最前面的2.4.其他的也类似,选择第一个,再比如:
在这里插入图片描述
解决了2之后
运行还是错。但是错误不一样了,说classdefnotfound。

说了这么多,现在才是正文,上面只是踩的坑,烦死了。正文开始:
解决方法:
1.删除你那6个包
2.在android studio中下载gson包,怎么下载,上面的图片已经说过了,这里只贴一个图片。
在这里插入图片描述
然后使用gson来完成json数据格式的解析,那么由于不是json的那6个包,那么自然和json6个包进行数据格式解析的方法不同。
比如json6个包中的是fromObject(String jsonstring)方法。

JSONObject jsonObject=JSONObject.fromObject(String jsonstring);

但是gson不一样,其简单使用方法如下:
下面使用类作为数据载体,用gson把一个javabean类转换成json数据,然后传输。

//这个是一个类Javabean,下面代码有这个类是什么。
   DiscoverAllTables discoverAllTables = new DiscoverAllTables();
                discoverAllTables.setAuthor(author);
                discoverAllTables.setComment(comment);
                discoverAllTables.setContent(content);
                discoverAllTables.setMark(mark);
                discoverAllTables.setTitle(title);
                discoverAllTables.setTablename(tablename);
                //Gson派上用场。
                Gson gson = new Gson();
               //下面化成json格式数据.
                String jsonstring = gson.toJson(discoverAllTables);

下面是那个类。


public class DiscoverAllTables {
    private int id;
    String author,title,mark,content,comment,tablename;

    public String getTablename() {
        return tablename;
    }

    public void setTablename(String tablename) {
        this.tablename = tablename;
    }
    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getAuthor() {
        return author;
    }

    public void setAuthor(String author) {
        this.author = author;
    }

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public String getMark() {
        return mark;
    }

    public void setMark(String mark) {
        this.mark = mark;
    }

    public String getContent() {
        return content;
    }

    public void setContent(String content) {
        this.content = content;
    }

    public String getComment() {
        return comment;
    }

    public void setComment(String comment) {
        this.comment = comment;
    }
}

假设另外一个端收到了这个jsonstring,如何反向解析呢?
这里也只介绍Gson的使用方法,而不是用那6个包的使用方法。

//由json格式的数据jsonstring对应上面的反向解析成类。
  JSONObject jsonObject = new JSONObject(jsonstring);
  Gson gson = new Gson();
  DiscoverAllTables discoverAllTables=gson.fromJson(jsonObject.toString(),DiscoverAllTables.class);
  //有了这个对象,你就可以访问数据了,比如:
  String xxx=discoverAllTables.getXXX();

此外还有一个你经常用到的,就是jsonstring是一个数组类型转化而来的,比如说是一堆名字,也就是字符串数组,我们一般使用ArrayList而不是String[]。
下面是正向:

List<String> list=new Arraylist<String>();
list.add("bob");
list.add("mike");
Gson gson = new Gson();
String jsonstring = gson.toJson(list);

下面是逆向解析

JSONArray jsonArray = new JSONArray(jsonstring);
  Gson gson = new Gson();
  List<String> list=new Arraylist<String>();
  list = gson.fromJson(jsonArray.toString(), new TypeToken<ArrayList<String>>() {
                    }.getType());
 //然后你就可以操作list了。

上面就是常见的两种利用Gson解析和生成json数据的方式,一个是数组(反向接收的时候用JSONArray,如上代码),一个是类(反向接收的时候JSONObject,如上上上代码)。如果对格式要求不高,比如数据格式没有什么复杂嵌套的话,基本上能解决你的问题了。

总结,我android studio用Gson包,不用那6个包,而Gson主要用好toJson(),fromJson()两个方法就可以。服务器端开发可以用那6个包,至于是不是最新版的包都没有问题,都不会有冲突什么的错误,可以正常使用。
如有错误,欢迎交流。

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐