2017-11-12 13 views
-2

JavaでJSONファイルを解析しようとしています。しかし、JSONファイルの形式は複雑です(少なくとも私にとっては)、したがって私はロードブロッキングに遭遇しました。JavaでJSONファイルを解析する

あなたが「のreddit」ファイル内で[ファイル] - Reddit JSON file

を読んでも、「キー」私は深く、ファイル内のJSON配列内にネストされた「身体」であるに興味を持っています。

私は、JavaオブジェクトにJSONの解析および逆シリアル化のためにジャクソンを使用していますし、私のコードはfollows-

class Reddit 
{ 
    private String kind; 
    private String data; 

    public String getData() 
    { 
     return this.data; 
    } 

    public void setData(String data) 
    { 
     this.data = data; 
    } 

    public String getKind() 
    { 
     return this.data; 
    } 

    public void setKind(String data) 
    { 
     this.data = data; 
    } 

} 


public class Attempting_Read_JSON 
{ 
    public static void main(String[] args) 
    { 
     // ObjectMapper can parse JSON into Java Objects, can do vice-versa and more- 
     ObjectMapper OM = new ObjectMapper(); 

     try 
     { 
      out.println("\nInside try block.\n"); 
      File json_file = new File("src/main/resources/data/reddit/redditdump.json"); 
      Reddit[] R = OM.readValue(json_file, Reddit[].class); 

      out.println("\nRead from JSON file to 'Reddit class object'\n"); 

      //out.println("\nObtained JSON- " + R.getData()); 
     } 
     catch (Exception E) 
     { 
      E.printStackTrace(); 
     } 

    out.println("\n\nProgram terminated successfully!\n"); 
    } 
} 

ようですが、プログラムを実行する上で、それは私にエラーを与え続けています。 キーに関連付けられた値をどのように得ることができるかについての提案はどれですか?

ありがとうございます!あなたのJSONファイル"data":

+1

は、「それは私にエラーを与え続けて」あまりに – shakeel

+0

エラーgiven- com.fasterxml.jackson.databind.exc.MismatchedInputException @shakeelエラーを共有してください:START_OBJECTのうち、java.lang.String' 'のインスタンスをデシリアライズすることはできませんトークン [ソース:(ファイル); (参照チェーン:java.lang.Object [] [0] - > de.dbvis.utils.Reddit ["data"]) – Arun

答えて

0

はオブジェクトであり、あなたはprivate String data;を通じてRedditクラスにStringに割り当てるしようとしています。

このエラーが発生したのはこのためです。

Datamembers contest_mode, banned_by....というクラスを作成するか、JSONオブジェクトを使用して解析する必要があります。また、なぜあなたはここにdataを設定している

kind

public String getKind() 
    { 
     return this.data; 
    } 

    public void setKind(String data) 
    { 
     this.data = data; 
    } 

EDIT使用します。簡単にするため を私はあなたの小さな一例を与える:

JSONファイル:

[ 
    { 
     "kind": "Listing", 
     "data": { 
      "contest_mode": false 
     } 
    }, 
    { 
     "kind": "Listing", 
     "data": { 
      "contest_mode": false 
     } 
    } 
] 

をあなたのコード:

public class Attempting_Read_JSON { 
    public static void main(String[] args) { 
     ObjectMapper OM = new ObjectMapper(); 

     try { 
      out.println("\nInside try block.\n"); 
      File json_file = new File(
        "src/main/resources/data/reddit/redditdump.json"); 
      Reddit[] R = OM.readValue(json_file, Reddit[].class); 

      out.println("\nRead from JSON file to 'Reddit class object'\n" + R[0].toString()); 

      // out.println("\nObtained JSON- " + R.getData()); 
     } catch (Exception E) { 
      E.printStackTrace(); 
     } 

     out.println("\n\nProgram terminated successfully!\n"); 
    } 
} 

class Reddit { 
    private String kind; 
    @Override 
    public String toString() { 
     return "Reddit [kind=" + kind + ", data=" + data.toString() + "]"; 
    } 

    private Data data; 

    public Data getData() { 
     return this.data; 
    } 

    public void setData(Data data) { 
     this.data = data; 
    } 

    public String getKind() { 
     return this.kind; 
    } 

    public void setKind(String kind) { 
     this.kind = kind; 
    } 
} 

class Data 
{ 
    boolean contest_mode; 

    public boolean isContest_mode() { 
     return contest_mode; 
    } 

    public void setContest_mode(boolean contest_mode) { 
     this.contest_mode = contest_mode; 
    } 

    @Override 
    public String toString() { 
     return "[contest_mode=" + contest_mode + "]"; 
    } 
} 
+0

あなたは以下からのチュートリアルをお持ちですか?ここで私はJSONオブジェクトを使って解析する方法を参照できますか? – Arun

+0

@Arunネット上にたくさんの例があります。 1つはhttp://tutorials.jenkov.com/java-json/jackson-objectmapper.htmlです。 –

+0

EDIT部分を確認してください –