读取文件并将其存储在一个数组中,然后将文件分割到任何地方都有一个},

时间:2013-09-10 14:21:39

标签: java arrays json

我想读取一个文件并将其存储在一个数组中,然后将数组拆分到任何地方,以便数组中的每个项目都包含拆分的字符串。这就是我的意思,

我的文件包含以下内容:

[
{
    "sample1": {
        "color": "red", 
        "date": "2011, 
        "name": "george"
    }
}, 
{
    "sample2": {
        "color": "red", 
        "date": "2012", 
        "name": "phil"
    }
}, 

我想读取这个文件,例如有数组中的oth元素来表示

{
        "sample1": {
            "color": "red", 
            "date": "2011, 
            "name": "george"
        }
}, 

和第一个元素代表

    {
    "sample2": {
        "color": "red", 
        "date": "2012", 
        "name": "phil"
    }
}, 

现在我不太清楚如何做到这一点,我不知道我的数组的大小是多少,我不知道如何访问我的数组的每个元素,我已经从这开始到现在为止

String str;
  char[] getArray;

  FileReader fr = new FileReader("/sampleProject");
  BufferedReader br = new BufferedReader(fr);

  br.readLine();

  while ((str = br.readLine()) != null) {
     str.toCharArray();
     str.split("},");

  }

  System.out.println("Here it is" + str);

  br.close();
}

3 个答案:

答案 0 :(得分:0)

您最好使用Jackson Mapper将JSON解析为Object,如下所示:

        import org.codehaus.jackson.JsonGenerationException;
        import org.codehaus.jackson.map.JsonMappingException;
        import org.codehaus.jackson.map.ObjectMapper;

        public void readJSON(){
            MyBean bean;
            ObjectMapper mapper = new ObjectMapper();

            try {
                bean = mapper.readValue(new File("/sampleProject"), MyBean.class);

            } catch (JsonGenerationException e) {
                  e.printStackTrace();
            } catch (JsonMappingException e) {
                  e.printStackTrace();
            } catch (IOException e) {
                  e.printStackTrace();
            }
        }

您可以获得有关JSON的更多信息 - > Java对象转换:http://www.mkyong.com/java/how-to-convert-java-object-to-from-json-jackson/

答案 1 :(得分:0)

如果你不知道,数组的大小是什么,你可以使用ArrayList。 str.toCharArray();str.split("},")};可能无法达到预期效果,因为您永远不会将返回的值设为对象。

我没有对此进行测试,但也许它可以满足您的需求:

String str;
  char[] getArray;

  FileReader fr = new FileReader("/sampleProject");
  BufferedReader br = new BufferedReader(fr);

  br.readLine();
  ArrayList<String> result = new ArrayList<>();

  while ((str = br.readLine()) != null) {
     String[] array = str.split("},");
     for(int i = 0; i< array.length;i++) {
         result.add(array[i]);
     }
  }

  System.out.println("Here it is" + str);

  br.close();

答案 2 :(得分:0)

你非常接近它。只是一个观点,这是不必要的。如果数据足够小以使其完全保留在内存中,那么这就是您的代码:

StringBuilder data = new StringBuilder();
BufferedReader br = new BufferedReader(new FileReader("/sampleProject"));

// Read data in
String line;
while ((line = br.readLine()) != null) data.append(line);

// Split into packages
for(String package : data.toString().split("}")
    System.out.println("Here it is" + package + "}");

br.close();

一件小事是,split删除了您可以在}中再次追加的最终System.println()

是的,它看起来像JSON,其中存在良好的JSON解析器,例如: here。但如果你不需要它......

当您的数据太大而无法保留在内存中时,情况可能更为相关。您需要设置完全流式解决方案。