JAVA如何获取本地.json文件并遍历

因为开发的原因,后期要测试,就在网上抓取了一些商品数据,并组成了json文件.然而我在从本地读取并遍历的时候,遇到了点问题.无法直接遍历,报错Exception in thread "main" com.google.gson.JsonSyntaxException: com.google.gson.stream.MalformedJsonException: Use JsonReader.setLenient(true) to accept malformed JSON at line 2 column 2 path $
at com.google.gson.JsonParser.parse(JsonParser.java:65)
at com.google.gson.JsonParser.parse(JsonParser.java:45)
at com.enation.framework.util.JsonUtil.parseJsonArray(JsonUtil.java:103)
at com.enation.framework.util.JsonUtil.toList(JsonUtil.java:43)
at com.enation.app.b2b2c.front.api.goods.InsertGoods.main(InsertGoods.java:136)
Caused by: com.google.gson.stream.MalformedJsonException: Use JsonReader.setLenient(true) to accept malformed JSON at line 2 column 2 path $
at com.google.gson.stream.JsonReader.syntaxError(JsonReader.java:1574)
at com.google.gson.stream.JsonReader.checkLenient(JsonReader.java:1423)
at com.google.gson.stream.JsonReader.doPeek(JsonReader.java:546)
at com.google.gson.stream.JsonReader.peek(JsonReader.java:429)
at com.google.gson.JsonParser.parse(JsonParser.java:60)
... 4 more


```因为json文件中有特别多的数据,哪位大神有好点的方法,特别是有代码的话更好,万分感谢!

6个回答

最近一直比较忙,想起了以前的这个问题,就偶来做个总结.因为当时造成错误的原因是因为要在网站上添加很多的测试数据,人工添加的话,很不现实
,因为是一个全品类b2b2c的网站,各类数据都要有点.所以采用的最好的方法就是去抓数据,最开始的做法是将数据全部抓取下来,在本地保存成一个json
文件,因为每个商品的信息都特别全,最后造成了本地的json文件数据量过大,一个json文件就有不到1G的内存,本地一旦读取的话就卡死,而且因为商品
类型的不一样,造成 了商品数据的不规范,在解析读取的时候报各种错.

最后想想了,又把读写的工具类改了下,每抓取一条数据,就进行解析,解析出错就跳过,抓取下一条,然后解析,测试了一些数据之后,将所有可能出现的不规范数据做了一个总结的判断,然后开始一边抓取,一边读写,虽然时间比较长,但是结果还是比较完美的

我先看看,如果OK的话....你懂的!

没有人吗?来大神帮指点下啊!

之前 从网上抓过json 格式的文也是出现过很多的特殊符号,导致格式化为正常数据失败。
我采用的方法 是将指定字符替换掉。然后再进行数据的处理。。。replaceAll() 这个你应该知道吧,我就不多说了,这是我用过的解决方案

import java.io.*;
/**

  • Created by tang on 14-3-1. */ public class JsonUtils { //从给定位置读取Json文件 public static String readJson(String path){ //从给定位置获取文件 File file = new File(path); BufferedReader reader = null; //返回值,使用StringBuffer StringBuffer data = new StringBuffer(); // try { reader = new BufferedReader(new FileReader(file)); //每次读取文件的缓存 String temp = null; while((temp = reader.readLine()) != null){ data.append(temp); } } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); }finally { //关闭文件流 if (reader != null){ try { reader.close(); } catch (IOException e) { e.printStackTrace(); } } } return data.toString(); } 上边是JSON的读取, 下边是遍历 : import java.text.SimpleDateFormat;
    import java.util.Date;
    import java.util.HashMap;
    import java.util.Iterator;
    import java.util.Map;
    import java.util.Set;

import net.sf.json.JSONObject;

import net.sf.json.JsonConfig;

public class Test3 {

/** 
 * @param args 
 */  
public static void main(String[] args) {  
    // TODO Auto-generated method stub  
    String s="【Object json树形字符串】";  
    Map map=new HashMap();  
    JsonConfig jc=new JsonConfig();  
    jc.setClassMap(map);  
    jc.setRootClass(Map.class);  
    jc.setArrayMode(JsonConfig.MODE_LIST);  
    JSONObject jobj=JSONObject.fromObject(s,jc);  
    //递归遍历  
    decodeJSONObject(jobj);  
}  
public static void decodeJSONObject(JSONObject json){  
    Iterator<String> keys=json.keys();  
    JSONObject jo=null;  
    Object o;  
    String key;  
    while(keys.hasNext()){  
        key=keys.next();  
        o=json.get(key);  
        if(o instanceof JSONObject){  
            jo=(JSONObject)o;  
            if(jo.keySet().size()>0){  
                decodeJSONObject(jo);  
            }else{  
                System.out.println(key);  
            }  
        }else{  
            System.out.println(o);  
        }  
    }  
}  

}

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问