数据类型格式转换

  朋友遇到一个需求,要把字符串格式转换成json格式:

经理给他一个txt文档,内容大概是这样的:

'330000','浙江省','10',
'330600','浙江省绍兴市','1000',
'330601','浙江省绍兴市市辖区','100001',
'330602','浙江省绍兴市越城区','100002',
'330603','浙江省绍兴市柯桥区','100003',
'330604','浙江省绍兴市上虞区','100004',
'330624','浙江省绍兴市新昌县','100024',
'330681','浙江省绍兴市诸暨市','100081',
'330683','浙江省绍兴市嵊州市','100083',
'330100','浙江省杭州市','1001',
'330101','浙江省杭州市市辖区','100101',
'330102','浙江省杭州市上城区','100102',
'330103','浙江省杭州市下城区','100103',
'330104','浙江省杭州市江干区','100104',
'330105','浙江省杭州市拱墅区','100105',
'330106','浙江省杭州市西湖区','100106',
'330108','浙江省杭州市滨江区','100108',
'330109','浙江省杭州市萧山区','100109',
'330110','浙江省杭州市余杭区','100110',   ...

3000多行吧,想要的效果是这样的

{
    "list": [{
        "itemName": "浙江省",
        "itemNo": "330000",
        "sortno": "10"
    }, {
        "itemName": "浙江省绍兴市",
        "itemNo": "330600",
        "sortno": "1000"
    }, {
        "itemName": "浙江省绍兴市市辖区",
        "itemNo": "330601",
        "sortno": "100001"
    }, {
        "itemName": "浙江省绍兴市越城区",
        "itemNo": "330602",
        "sortno": "100002"
    }, {
        "itemName": "浙江省绍兴市柯桥区",
        "itemNo": "330603",
        "sortno": "100003"
    }, {
        "itemName": "浙江省绍兴市上虞区",
        "itemNo": "330604",
        "sortno": "100004"
    }, {
        "itemName": "浙江省绍兴市新昌县",
        "itemNo": "330624",
        "sortno": "100024"
    }, {
        "itemName": "浙江省绍兴市诸暨市",
        "itemNo": "330681",
        "sortno": "100081"
    }, {...

我的想法是这样的,先按行读取文件,然后将每一行作为字符串保存在集合里面,然后循环读取集合,之后“,”作为分隔符,取出单引号里面的数值,并且创建实体类再给实体类属性赋值,实体类属性即如需求的itemName等,接着将对象保存在集合里面。最后将集合转换成json串格式写入txt。

代码截图如下:

JsonUtil类

package demo;

import com.alibaba.fastjson.JSONObject;

import java.io.*;
import java.util.ArrayList;
import java.util.List;

/**
 * Json转换类
 * @author jtniu
 *
 */
public class JsonUtil {
    /**
     * 将字符串转换成对象集合
     * @param str 字符串
     * @return 对象集合
     */
    public static List<Emp> changeString2Emp(List<String> str){
        List<Emp> emps=new ArrayList<Emp>();
       // str.forEach(System.out::println);
        //System.out.println(xx[0]+","+xx[1]+","+xx[2]);
        Emp e1=new Emp(str.get(0).split(",")[0].substring(2,str.get(0).split(",")[0].length()-1),str.get(0).split(",")[1].substring(1,str.get(0).split(",")[1].length()-1),str.get(0).split(",")[2].substring(1,str.get(0).split(",")[2].length()-1));
        emps.add(e1);
        for(int i=1;i<str.size();i++){
            String[] xx=str.get(i).split(",");
            //System.out.println(xx[0]+","+xx[1]+","+xx[2]);
           String itemNo=xx[0].substring(1,xx[0].length()-1);
            String itemName= xx[1].substring(1,xx[1].length()-1);
            String sortno=xx[2].substring(1,xx[2].length()-1);
            Emp e=new Emp(itemNo,itemName,sortno);
            emps.add(e);
        }
        return emps;
    }

    /**
     * 读文件
     * @param fileName 文件名
     * @return 字符串集合
     */
    public static List<String> readFileByLines(String fileName) {
        File file = new File(fileName);
        BufferedReader reader = null;
        List<String> list=new ArrayList<String>();
        try {
            System.out.println("以行为单位读取文件内容,一次读一整行:");
            reader = new BufferedReader(new FileReader(file));
            String tempString = null;
            int line = 1;
            // 一次读入一行,直到读入null为文件结束
            while ((tempString = reader.readLine()) != null) {
                // 显示行号
                System.out.println("line " + line + ": " + tempString);
                list.add(tempString);
                line++;
            }
            reader.close();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (reader != null) {
                try {
                    reader.close();
                } catch (IOException e1) {
                }
            }
        }
        return list;
    }

    /**
     * 集合转换成json
     * @param list 集合
     * @return json对象
     */
    public static JSONObject EmpList2Json(List list){
        JSONObject json = new JSONObject();
        json.put("list",list);
        return json;
    }

    /**
     * 将json写入txt文件
     * @param arrays json字符串
     * @return txt文件
     */
    public static void writeFile(String arrays) {
        try {
            PrintWriter pw=new PrintWriter(new FileOutputStream(new File("json.txt")));
            pw.print(arrays);
            pw.flush();
        } catch (IOException e) {
            e.printStackTrace();
        }

    }
}

Emp类(实体类)

package demo;

public class Emp {
    private String itemNo;
    private String itemName;
    private String sortno;
    public Emp() {
    }
    public Emp(String itemNo, String itemName, String sortno) {
        this.itemNo = itemNo;
        this.itemName = itemName;
        this.sortno = sortno;
    }

    @Override
    public String toString() {
        return "Emp{" +
                "itemNo='" + itemNo + '\'' +
                ", itemName='" + itemName + '\'' +
                ", sortno='" + sortno + '\'' +
                '}';
    }

    public String getItemNo() {
        return itemNo;
    }

    public void setItemNo(String itemNo) {
        this.itemNo = itemNo;
    }

    public String getItemName() {
        return itemName;
    }

    public void setItemName(String itemName) {
        this.itemName = itemName;
    }

    public String getSortno() {
        return sortno;
    }

    public void setSortno(String sortno) {
        this.sortno = sortno;
    }
}

测试类

package demo;

import java.util.List;

public class Demo2 {
    public static void main(String args[]){
        try {
            JsonUtil.writeFile(
                    JsonUtil.EmpList2Json(
                            JsonUtil.changeString2Emp(
                                    JsonUtil.readFileByLines("地址.txt"))).toString());
        }catch (Exception e){
            e.printStackTrace();
        }

    }
}

结果是得到了,中间遇到一个问题,就是读取第一行数据的时候,我“,”切割然后存itemNo的值的时候,会把左边的单引号也一起存入,第二行到后面的都没有问题,不是很懂,我就把第一行特地拿出来写了。。。

如果有更加简单的办法希望能和各位大佬一起探讨,(不喜勿喷,谢谢0.0)

完整项目地址:https://github.com/niujt/JsonDemo-web.git      里面的jsondemo包

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值