0

ファイルを読み取って配列に保存し、配列内の各項目に分割された文字列が含まれるように、配列を } のある場所で分割します。これが私が言いたいことです。

私のファイルには次のようなものが含まれています:

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

このファイルを読みたいのですが、たとえば、配列内の他の要素を表現する必要があります

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

そして要素番号1が表す

    {
    "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();
}
4

3 に答える 3

0

次のように、Jackson Mapper を使用してその JSON をオブジェクトに解析することをお勧めします。

        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/ を参照してください。

于 2013-09-10T14:35:04.880 に答える
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();
于 2013-09-10T14:40:17.227 に答える
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();

マイナーなことの 1 つは、 で再び追加できるsplitfinal を削除することです。}System.println()

そして、はい、良い JSON パーサーが存在する JSON のように見えます。でも、いらないなら…

より関連性の高いのは、データが大きすぎてメモリに保持できない場合です。完全にストリーミングされたソリューションをセットアップする必要があります。

于 2013-09-10T14:41:38.367 に答える