字符串转json对象

package wordcount.算数表达式;

import org.apache.commons.io.IOUtils;

import java.io.FileReader;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class Str2Map {
    public String strs;
    int position=0;
    Object current;
    Object nextToken(){
        while (position<strs.length()){
            switch (strs.charAt(position)){
                case '\r':
                    position++ ; break;
                case '\n':
                    position++ ; break;
                case '\t':
                    position++ ; break;
                case ' ':
                    position++ ; break;
                case '"':
                    return current=getStr('"');
                case '\'':
                    return current=getStr('\'');
                case '{':
                    ++position;
                    return current=Token.LJ;
                case '}':
                    ++position;
                    return current=Token.RJ;
                case '[':
                    ++position;
                    return current=Token.LA;
                case ']':
                    ++position;
                    return current=Token.RA;
                case ',':
                    ++position;
                    return current=Token.DOUHAO;
                case ':':
                    ++position;
                    return current=Token.MAO;
                case 'n':
                    position+=4;
                    return current=Token.NULL;
                default:{
                    if( '0'<=strs.charAt(position) && strs.charAt(position)<='9'){
                        return current=getNum();
                    }
                }
            }


        }
        return null;
    }

    private Number getNum() {
        StringBuffer stringBuffer=new StringBuffer();
        boolean isDouble=false;
        while ('0'<=strs.charAt(position) && strs.charAt(position)<='9'||strs.charAt(position)=='.'){
            if(strs.charAt(position)=='.'){
                isDouble=true;
            }
            stringBuffer.append(strs.charAt(position));
            position++;
        }
        if(!isDouble) {
            return Integer.valueOf(stringBuffer.toString());
        }else{
            return Double.valueOf(stringBuffer.toString());
        }
    }

    public String getStr(char end){
        StringBuffer stringBuffer=new StringBuffer();
        position++;
        while (strs.charAt(position)!=end){
            stringBuffer.append(strs.charAt(position));
            position++;
        }
        position++;
        return stringBuffer.toString();
    }

    public Map<String,Object> getJSON(){
        Map<String,Object> json=new HashMap<>();
        nextToken();
        while (current!=Token.RJ){
            String key= (String) current;
            nextToken();
            Object o = nextToken();
            if(o == Token.NULL){
                json.put(key,null );
                nextToken();
            }
            else if(!(o instanceof Token)){
                json.put(key,o );
                nextToken();
            }
            else if ( o == Token.LJ){
                json.put(key,getJSON() );
            }
            else if( o == Token.LA){
                json.put(key, getArr());
            }
            if(current == Token.DOUHAO){
                nextToken();
            }
        }
        nextToken();
        return json;
    }

    public List getArr(){
        List list=new ArrayList();
        nextToken();
        while (current!=Token.RA){
            if(current == Token.LA){
                list.add(getArr());
            }
            else if(current == Token.LJ){
                list.add(getJSON());
            }
            else{
                if(current == Token.NULL){
                    list.add(null);
                }else {
                    list.add(current);
                }
                nextToken();
            }
            if(current == Token.DOUHAO){
                nextToken();
            }
        }
        nextToken();
        return list;
    }

    Object getObj(){
        nextToken();
        if(current==Token.LJ){
            return getJSON();
        }
        else{
            return getArr();
        }
    }

    public static void main(String[] args) throws Exception {
        Str2Map str2Map=new Str2Map();
        str2Map.strs=IOUtils.toString(new FileReader("C:\\Users\\Administrator\\Desktop\\bb\\case.txt"));
        System.out.println(str2Map.getObj());
    }
}
//{"a":"a1","b":123,"c":{"a":"a1","b":123},"d":{"a":"a1","b":123,"c":{"a":"a1","b":123}}}
package wordcount.算数表达式;

public enum Token {

    LJ("{"),RJ("}"),LA("["),RA("]"),DOUHAO(","),MAO(":"),NULL("null") ;
    String str;

    private Token(String str){
        this.str=str;
    }


}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值