朋友遇到一个需求,要把字符串格式转换成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包