解析json格式数据详解编程语言

实现目标

  读取文件中的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:[email protected].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; 
    } 
}

  致谢:感谢您的阅读.

原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/tech/pnotes/15129.html

(0)
上一篇 2021年7月19日 17:32
下一篇 2021年7月19日 17:32

相关推荐

发表回复

登录后才能评论