json字符串数据保存并生成dbf文件

如需转载分享,请标明出处,且不用于盈利为目的,谢谢合作!

json字符串数据保存并生成dbf文件

简单介绍学习过程遇到的问题:
定义dbf文件字段fields[i].setName(names[i]);时如果设置的名字是中文会报错,解决办法:

下载源码https://github.com/albfernandez/javadbf
打包 最新的javadbf版本1.10.2,支持dbf文件field字段为中文
步骤:
1.git clone https://github.com/albfernandez/javadbf.git
2.跳过test打包 mvn clean package compile -Dmaven.test.skip=true
3.将打的包放到本地maven库 mvn install:install-file -Dfile=D:\javadbf-1.10.2-SNAPSHOT.jar -DgroupId=commvn install:install-file -Dfile=D:\javadbf-1.10.2-SNAPSHOT.jar -DgroupId=com

1.添加pom.xml依赖

 		<!--javadbf-->
        <dependency>
            <groupId>com.github.albfernandez</groupId>
            <artifactId>javadbf</artifactId>
            <version>1.10.2</version>
        </dependency>
          <!--lombok-->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>

2.新建类JsonToDBF.java

package com.yss.file.filedown.util;

import com.linuxense.javadbf.DBFDataType;
import com.linuxense.javadbf.DBFField;
import com.linuxense.javadbf.DBFUtils;
import com.linuxense.javadbf.DBFWriter;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;

import java.io.File;
import java.io.FileOutputStream;
import java.nio.charset.Charset;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

public class JsonToDBF {
    public static void createDbf(String src, JSONArray jsonArray) {
        JSONObject first = jsonArray.getJSONObject(0);
        Iterator<String> iterator = first.keys();
        List<String> header = new ArrayList<>();
        while (iterator.hasNext()) {
            // 得到key
            String key = (String) iterator.next();
            header.add(key);
        }
        DBFWriter writer = null;
        FileOutputStream fos = null;
        try {
            //定义DBF文件字段
            DBFField[] fields = new DBFField[header.size()];
            for (int i = 0; i < fields.length; i++) {
                fields[i] = new DBFField();
                fields[i].setName(header.get(i));
                fields[i].setType(DBFDataType.CHARACTER);
                fields[i].setLength(20);
            }
            fos = new FileOutputStream(new File(src));
            //定义DBFWriter实例用来写DBF文件
            writer = new DBFWriter(fos, Charset.forName("GBK"));
            //把字段信息写入DBFWriter实例,即定义表结构
            writer.setFields(fields);
            for (int i = 0; i < jsonArray.size(); i++) {
                // 得到数组的每项
                JSONObject item = jsonArray.getJSONObject(i);
                // 得到key集合
                iterator = item.keys();
                int j = 0;
                Object[] rowData = new Object[header.size()];
                while (iterator.hasNext()) {
                    // 得到key
                    String key = iterator.next();
                    // 得到key对应的value
                    String value = item.getString(key);
                    rowData[j++] = value;
                }
                writer.addRecord(rowData);
            }
            //写入数据
            writer.write();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            DBFUtils.close(fos);
            DBFUtils.close(writer);
        }

    }

    public static void main(String[] args) {
        String str = "[\n" +
                "    {\n" +
                "      \"姓名\":\"张三\",\n" +
                "\t  \"性别\":\"男\",\n" +
                "\t  \"年龄\":\"22\"\n" +
                "    },\n" +
                "\t {\n" +
                "      \"姓名\":\"李四\",\n" +
                "\t  \"性别\":\"男\",\n" +
                "\t  \"年龄\":\"23\"\n" +
                "    },\n" +
                "\t {\n" +
                "      \"姓名\":\"王五\",\n" +
                "\t  \"性别\":\"男\",\n" +
                "\t  \"年龄\":\"22\"\n" +
                "    },\n" +
                "\t {\n" +
                "      \"姓名\":\"张三丰\",\n" +
                "\t  \"性别\":\"男\",\n" +
                "\t  \"年龄\":\"100\"\n" +
                "    },\n" +
                "\t {\n" +
                "      \"姓名\":\"楚雨荨\",\n" +
                "\t  \"性别\":\"女\",\n" +
                "\t  \"年龄\":\"22\"\n" +
                "    },\n" +
                "\t {\n" +
                "      \"姓名\":\"张翰dfdfdf\",\n" +
                "\t  \"性别\":\"男\",\n" +
                "\t  \"年龄\":\"23\"\n" +
                "    },\n" +
                "\t {\n" +
                "      \"姓名\":\"张无忌sdfdsfdsfdfdfdff\",\n" +
                "\t  \"性别\":\"男\",\n" +
                "\t  \"年龄\":\"24\"\n" +
                "    },\n" +
                "\t {\n" +
                "      \"姓名\":\"赵敏\",\n" +
                "\t  \"性别\":\"女\",\n" +
                "\t  \"年龄\":\"23\"\n" +
                "    }\n" +
                "  ]";
        JSONArray jsonArray = JSONArray.fromObject(str);
        createDbf("D:/uselist.dbf", jsonArray);
    }
}

3.结果数据展示
在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值