json字符串转ArrayList<Map<String,Object>>,json字符串转map

json字符串转ArrayList<Map<String,Object>>,json字符串转map,第1张

将list字符串转ArrayList>(需json字符串转map方法)

public static ArrayList> strislist(Object str){
        StringBuffer strb=new StringBuffer( str.toString());
        List list=new ArrayList<>();
        while (strb.indexOf("{")!=-1){
            int i=strb.indexOf("{");
            int k=rueurnindex(new StringBuffer(strb));
            list.add(strb.substring(i,k));
            strb.delete(0,k);
        }
        ArrayList> listMap=new ArrayList<>();
        for (String s:list){
            listMap.add(sismap(s));
        }
        return listMap;
    }

效果:
输入[{“prid”:7,“uid”:[{“cid”:132,“data”:“datatext”},{“cid”:132,“data”:“datatext”}],“sum”:“3999”,“ptype”:“否”,“datetime”:“2022-05-12 17:40:07”},{“prid”:8,“uid”:{“cid”:132,“data”:“datatext”},“sum”:“150”,“ptype”:“是”,“datetime”:“2022-05-12 17:40:07”},{“prid”:9,“uid”:null,“sum”:“3999”,“ptype”:“否”,“datetime”:“2022-05-12 18:26:56”}]
输出

返回值是三个map的集合,因为键值是Object,没法get所以保留json格式,可再次调用此方法或转map方法转为所需的list或map

json字符串转map(需下面两个方法)

public static Map sismap(String param) {

        Map map = new HashMap<>();
        StringBuffer key=new StringBuffer();
        StringBuffer value=new StringBuffer();
        boolean k=false;
        boolean v=false;
        boolean s=false;
        char[] charList = param.toCharArray();
        for (int i = 0; i < charList.length; i++) {
            char c = charList[i];
            if (c == '\"') {

                if (charList[i+1]==':'){
                    if (charList[i+2]=='{'){
                        int index=rueurnindex(new StringBuffer(param.substring(i+2,param.length())));
                        map.put(key.toString(),param.substring(i+2,i+2+index));//准备将此键值对添入map
                        key.setLength(0);
                        value.setLength(0);
                        i=i+2+index;
                        continue;
                    } if (charList[i+2]=='['){
                        int index=rueurnindexz(new StringBuffer(param.substring(i+2,param.length())));
                        map.put(key.toString(),param.substring(i+2,i+2+index));//准备将此键值对添入map
                        key.setLength(0);
                        value.setLength(0);
                        i=i+2+index;
                        continue;
                    } else {
                        k=false;//不再拿key
                        v=true;//准备拿value
                        i++;
                        continue;
                    }
                }else if (charList[i+1]=='}'){
                    v=false;//不再拿value
                    map.put(key.toString(),value.toString());//准备将此键值对添入map
                    key.setLength(0);
                    value.setLength(0);
                }else {
                    if (!v)
                        k=true;//准备拿key
                    continue;
                }

            }else if(c==','&&charList[i+1]=='\"'){
                v=false;//不再拿value
                map.put(key.toString(),value.toString());//准备将此键值对添入map
                key.setLength(0);
                value.setLength(0);
            }

            if (k)
                key.append(c);
            if (v)
                value.append(c);

        }
        return map;
    }

效果:
输入{“prid”:7,“uid”:[{“cid”:132,“data”:“datatext”},{“cid”:132,“data”:“datatext”}],“sum”:“3999”,“ptype”:“否”,“datetime”:“2022-05-12 17:40:07”}
输出
数据单纯测试用

求第一个’{‘字符所对应’}'字符的位置

public static int rueurnindex(StringBuffer strb){
        //查到一个'{'记作1,一个'}'记作-1,当sum=0时最后一个'}'位置返回
        int sum=0;
        int i=0;//'{'位置
        int k=0;//'}'位置
        int p=0;//删掉的符号数
        do {
            i=strb.indexOf("{");
            k=strb.indexOf("}");
            if (i

求第一个’[‘字符所对应’]'字符的位置

 public static int rueurnindexz(StringBuffer strb){
        //查到一个'['记作1,一个']'记作-1,当sum=0时最后一个']'位置返回
        int sum=0;
        int i=0;//'['位置
        int k=0;//']'位置
        int p=0;//删掉的符号数
        do {
            i=strb.indexOf("[");
            k=strb.indexOf("]");
            if (i

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/922943.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-16
下一篇 2022-05-16

发表评论

登录后才能评论

评论列表(0条)