Json与List的相互转换

摘要:
如何在扫描二维码后将字符串转换为列表是另一个棘手的问题。因此,我想到了将列表的内容封装为json的想法。因为json本身是String类型,所以很容易生成QR码,然后解析json生成列表。所以我baidu:list被转换为json,我不知道是否没有检查。我检查了是否仍有json转换为列表。

问题由来:

最近由于做一个项目,项目的一个功能就是根据Listview的内容生成一个二维码,然后扫描二维码获取list,再重新显示listview。

核心就是: 
list—->生成二维码——>获取二维码—–>获取list

生成二维码的方法:

http://blog.csdn.net/demonliuhui/article/details/52948696

由于生成二维码的参数类型是String,不能是list。如果将list的内容get出来拼成String生成二维码。扫描二维码后如何处理String转为list又是一个棘手的问题。因此我想到了将list的内容封装成json,因为json本身就是String类型,所以生成二维码就会很简单,进而对json进行解析生成list。整个问题就变成了一个很easy的问题: 
list—->json——->生成二维码——>扫描二维码获取json——>解析json——->list

于是自己写了一个代码list转换为json:

 /**
     *数据封装成json
     *
     * @param items 物料入库数据
     * @return json
     * @throws JSONException
     */
public static String GoodIn2Json(List<GoodInfo> items) throws JSONException {
        if (items == null) return "";
        JSONArray array = new JSONArray();
        JSONObject jsonObject = null;
        GoodInfo info = null;
        for (int i = 0; i < items.size(); i++) {
            info = items.get(i);
            jsonObject = new JSONObject();
            jsonObject.put(Api.COLORID, info.getColorId());
            jsonObject.put(Api.STOCK, info.getStock());
            array.put(jsonObject);
        }
        return array.toString();
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
/**
     * 将json数组解析出来,生成自定义数据的数组
     * @param data 包含用户自定义数据的json
     * @return 自定义信息的数据
     * @throws JSONException
     */
    public static List<MoreInfo> Json2UserDefine(String data) throws JSONException {
        List<MoreInfo> items = new ArrayList<>();
        if (data.equals("")) return items;

        JSONArray array = new JSONArray(data);
        JSONObject object = null;
        MoreInfo item = null;
        for (int i = 0; i < array.length(); i++) {
            object = array.getJSONObject(i);
            String key = object.getString(Api.KEY);
            String value = object.getString(Api.VALUE);
            item = new MoreInfo(key, value);
            items.add(item);
        }
        return items;
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22

代码很简单,就不详解。这样貌似就大功告成了,但是: 
这样只能处理list里面只有一组数据的情况。如果循环封装成json,得到的格式就是:

[{"name":"name0","age":0}][{"name":"name1","age":5}][{"name":"name2","age":10}]
  • 1

而不是:

[{"name":"name0","age":0}{"name":"name3","age":15},{"name":"name4","age":20}] 
  • 1

很明显第一种格式并不是我想要的json格式,还要据循循环遍历json解析,想想就让人苦恼。 list里面参数少还好,如果有很多的话,岂不是要累死。

于是我百度了一下:list转换为json,不查不知道,一查原来还有json转换为list。狂吐两口老血!!! 
不过也算是学到了。 
1.使用谷歌的Gson.jar。 
2.使用阿里的fastJson.jar 
已经打包好了,地址: 
http://download.csdn.net/detail/demonliuhui/9666072

简单的令人发指:

谷歌的Gson.jar:

//list转换为json
Gson gson = new Gson();  
List<Person> persons = new ArrayList<Person>();  
String str = gson.toJson(persons);  
  • 1
  • 2
  • 3
  • 4
//json转换为list
Gson gson = new Gson();  
List<Person> persons = gson.fromJson(str, new TypeToken<List<Person>>(){}.getType());  
  • 1
  • 2
  • 3

阿里的fastJson.jar:

//list转换为json
List<CustPhone> list = new ArrayList<CustPhone>();
String str=JSON.toJSON(list).toString();
  • 1
  • 2
  • 3
//json转换为list
  List<Person> list = new ArrayList<Person>();  
        list = JSONObject.parseArray(jasonArray, Person.class);  
  • 1
  • 2
  • 3

导入jar包直接调用,简单无烦恼。

参考: 
http://blog.csdn.net/qxs965266509/article/details/42774691 
http://huyizizhen.iteye.com/blog/1453621 
http://blog.csdn.net/u010797575/article/details/43304981 

http://blog.csdn.net/paincupid/article/details/51221391

转载:http://blog.csdn.net/demonliuhui/article/details/52949079

免责声明:文章转载自《Json与List的相互转换》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇PrintPreviewControl控件【uniapp 开发】如何给边框添加阴影效果下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Http请求报头设置(C#)

1、添加一个SetHeaderValue方法: public static void SetHeaderValue(WebHeaderCollection header, string name, stringvalue) { var property = typeof(WebHeaderCollection).GetProperty("InnerColl...

ORA-00001: unique constraint (string.string) violated 违反唯一约束条件(.)

ORA-00001: unique constraint (string.string) violated ORA-00001:违反唯一约束条件(.) Cause: An UPDATE or INSERT statement attempted to insert a duplicate key. For Trusted Oracle configured...

两种访问接口的方式(get和post)

跨机器、跨语言的远程访问形式一共有三种:scoket发送数据包、http发送请求、rmi远程连接; http发送请求方式;分为post和get两种方式 importjava.io.IOException; importjava.io.InputStream; import java.util.Map; importjava.util.concurre...

.NET Core MD5加密 32位和16位

public class MD5Help {   //此代码示例通过创建哈希字符串适用于任何 MD5 哈希函数 (在任何平台) 上创建 32 个字符的十六进制格式哈希字符串官网案例改编   /// <summary>   ///获取32位md5加密   /// </summary>   /// <param nam...

使用sdk方式获取微信的用户信息

一、pom.xml 依赖 <dependency> <groupId>com.github.binarywang</groupId> <artifactId>weixin-java-mp</artifactId>...

Flink写入kafka时,只写入kafka的部分Partitioner,无法写所有的Partitioner问题

1. 写在前面 在利用flink实时计算的时候,往往会从kafka读取数据写入数据到kafka,但会发现当kafka多个Partitioner时,特别在P量级数据为了kafka的性能kafka的节点有十几个时,一个topic的Partitioner可能有几十个甚至更多,发现flink写入kafka的时候没有全部写Partitioner,而是写了部分的Par...