首页 > 学院 > 开发设计 > 正文

解析json格式数据

2019-11-14 15:03:21
字体:
来源:转载
供稿:网友

实现目标

  读取文件中的json格式数据,一行为一条json格式数据。进行解析封装成实体类。

  通过google的Gson对象解析json格式数据

  我现在解析的json格式数据为:

{"id": "1403","name": "1.2.3 Diva","has_barcode": true,"barcode_format": "EAN_13","homepage": "http://1-2-3.fr","regions": ["DE","FR"],"other_stores": [],"typos": ["un deux trois","un1deux2trois3"],"logo": "undeuxtrois","android_banner_url": "http://stocardapp.s3-external-3.amazonaws.com/android/banner/undeuxtrois.png","ios_banner_url": "http://stocardapp.s3-external-3.amazonaws.com/ios/banners/undeuxtrois.png","ios_logo_url": "http://stocardapp.s3-external-3.amazonaws.com/ios/icons/undeuxtrois@2x.png"},

代码实现

1、实体类

import java.util.List;public class ImportBrand{    PRivate int id;    private String name;    private String has_barcode;    private String barcode_format;    private String homepage;    private List<String> regions;    private List<String> other_stores;    private List<String> typos;    private String logo;    private String android_banner_url;    private String ios_banner_url;    private String ios_logo_url;        @Override    public String toString()    {        // TODO Auto-generated method stub        return "id=" + id + ",name = " + name + ",has_barcode = " + has_barcode + ",barcode_format=" + barcode_format +                ",homepage =" + homepage + ",regions = " + regions +",logo = " + logo +",android_banner_url = " + android_banner_url +                ",ios_banner_url=" + ios_banner_url + ",ios_logo_url = " + ios_logo_url;    }            public int getId()    {        return id;    }    public void setId(int id)    {        this.id = id;    }    public String getName()    {        return name;    }    public void setName(String name)    {        this.name = name;    }    public String getHas_barcode()    {        return has_barcode;    }    public void setHas_barcode(String has_barcode)    {        this.has_barcode = has_barcode;    }    public String getBarcode_format()    {        return barcode_format;    }    public void setBarcode_format(String barcode_format)    {        this.barcode_format = barcode_format;    }    public String getHomepage()    {        return homepage;    }    public void setHomepage(String homepage)    {        this.homepage = homepage;    }            public List<String> getRegions()    {        return regions;    }    public void setRegions(List<String> regions)    {        this.regions = regions;    }    public List<String> getOther_stores()    {        return other_stores;    }    public void setOther_stores(List<String> other_stores)    {        this.other_stores = other_stores;    }    public List<String> getTypos()    {        return typos;    }    public void setTypos(List<String> typos)    {        this.typos = typos;    }    public String getLogo()    {        return logo;    }    public void setLogo(String logo)    {        this.logo = logo;    }    public String getAndroid_banner_url()    {        return android_banner_url;    }    public void setAndroid_banner_url(String android_banner_url)    {        this.android_banner_url = android_banner_url;    }    public String getIos_banner_url()    {        return ios_banner_url;    }    public void setIos_banner_url(String ios_banner_url)    {        this.ios_banner_url = ios_banner_url;    }    public String getIos_logo_url()    {        return ios_logo_url;    }    public void setIos_logo_url(String ios_logo_url)    {        this.ios_logo_url = ios_logo_url;    }}

2、读取文件

import java.io.BufferedReader;import java.io.File;import java.io.FileInputStream;import java.io.InputStreamReader;import java.util.ArrayList;import java.util.List;/** * 读取文件 *  * @author zcr *  */public class ImportFile{    /**     * 功能:Java读取txt文件的内容 步骤:1:先获得文件句柄 2:获得文件句柄当做是输入一个字节码流,需要对这个输入流进行读取     * 3:读取到输入流后,需要读取生成字节流 4:一行一行的输出。readline()。 备注:需要考虑的是异常情况     *      * @param filePath     *            文件路径[到达文件:如: D:/aa.txt]     * @return 将这个文件按照每一行切割成数组存放到list中。     */    public static List<String> readTxtFileIntoStringArrList(String filePath)    {        List<String> list = new ArrayList<String>();        try        {            String encoding = "UTF-8";            File file = new File(filePath);            if (file.isFile() && file.exists())            { // 判断文件是否存在                InputStreamReader read = new InputStreamReader(                        new FileInputStream(file), encoding);// 考虑到编码格式                BufferedReader bufferedReader = new BufferedReader(read);                String lineTxt = null;                while ((lineTxt = bufferedReader.readLine()) != null)                {                    if (isRightFormat(lineTxt))                    {                        list.add(lineTxt.substring(lineTxt.indexOf("{"),lineTxt.lastIndexOf(',')));                    }                }                read.close();            }            else            {                System.out.println("找不到指定的文件");            }        }        catch (Exception e)        {            System.out.println("读取文件内容出错");            e.printStackTrace();        }        return list;    }    public static void main(String argv[])    {          String filePath = "C://Users//owner//Desktop//卓信科技实习//stores.json";          List<String> dataList = readTxtFileIntoStringArrList(filePath);                    for(int i = 0 ; i < dataList.size() ; i ++)           {              System.out.println(dataList.get(i));           }          System.out.println(dataList.size());    }    /**     * 判断数据是否是合法的格式     * @param jsonStr    带判断的数据     * @return            返回该行是否是正确的格式     */    public static boolean isRightFormat(String jsonStr)    {        return jsonStr.matches("[//p{Space}]*[{]{1}.*[}]{1}[,]{1}");    }}

3、方法调用及测试

/** * 格式化json数据 * @author zcr * */public class FormatJson{    public static void main(String[] args)    {        String filePath = "C://Users//owner//Desktop//卓信科技实习//stores.json";               List<ImportBrand> brandList = FormatJson.formatFileListToBrand(filePath);        for(int i = 0 ; i < brandList.size() ; i ++)        {            System.out.println(brandList.get(i));        }        System.out.println(brandList.size());    }        /**     * 将json格式数据转换成Import对象     * @param jsonStr    带转换的json对象     * @return            json格式数据对应的对象     */    public static ImportBrand formatFromJsonToObject(String jsonStr)    {        Gson gson = new Gson();        ImportBrand brand = gson.fromJson(jsonStr,ImportBrand.class);                return brand;    }        /**     * 将String类型的json格式转换为ImportBrand类型的集合     * @param jsonStrList    待转换的json格式List对象     * @return                json格式对象转换而成的ImportBrand对象集合     */    public static List<ImportBrand> formatStringListToBrand(List<String> jsonStrList)    {        List<ImportBrand> listImportBrand = new ArrayList<ImportBrand>();        int size = jsonStrList.size();        for(int i = 0 ; i < size ; i ++)        {            listImportBrand.add(formatFromJsonToObject(jsonStrList.get(i)));        }                return listImportBrand;    }        /**     * 读取文件,将json格式的数据转换成List对象的ImportBrand     * @param filePath    读取的文件路径     * @return                 */    public static List<ImportBrand> formatFileListToBrand(String filePath)    {        List<String> dataList = ImportFile.readTxtFileIntoStringArrList(filePath);        List<ImportBrand> brandList = formatStringListToBrand(dataList);               return brandList;    }}

  致谢:感谢您的阅读.


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表