2016-06-14 10 views
4

JavaでJsonファイルを読み込む際に問題が発生しています。Javaでjsonファイルを読む

それは、この形式のコンテンツを持つJSONファイルです:

{ 
    "_id": 2864071, 
    "name": "Neustadt", 
    "country": "DE", 
    "coord": { 
    "lon": 12.56667, 
    "lat": 52.400002 
    } 
} 

この私が使用していたコードされています

package controllers; 


@Named(value = "cityID") 
@SessionScoped 
public class getCityIDs implements Serializable { 



    public long getCityIDs(String name) { 

     //Read the json file 

     try { 

      FileReader reader = new FileReader(filePath); 

      JSONParser parser = new JSONParser(); 
      JSONObject jsonObject = (JSONObject) parser.parse(reader); 

      // get a number from the JSON object 

      String travelName = (String) jsonObject.get("name"); 

      if(travelName.equals(name)){ 
       long id = (long) jsonObject.get("_id"); 
       System.out.println(id); 
       return id; 
      } else { 
       System.out.println("else"); 
       return 0; 
      } 

     } catch (FileNotFoundException ex) { 
      Logger.getLogger(getCityIDs.class.getName()).log(Level.SEVERE, null, ex); 
     } catch (IOException | ParseException ex) { 
      Logger.getLogger(getCityIDs.class.getName()).log(Level.SEVERE, null, ex); 
     } 
     System.out.println("einde functie"); 
     return 0; 
     // JSONObject jsonObject = (JSONObject) parser.parse(getClass().getResource("/json/city.list.json").toString()); 
    } 

    public String test(){ 
     return "hello world"; 
    } 
} 

はしかし、それは私にこの行でエラーを与える:

JSONObject jsonObject = (JSONObject) parser.parse(reader); 

Severe: Unexpected token LEFT BRACE({) at position 88. 
    at org.json.simple.parser.JSONParser.parse(Unknown Source) 
    at org.json.simple.parser.JSONParser.parse(Unknown Source) 
    at controllers.getCityIDs.getCityIDs(getCityIDs.java:45) 

何らかの理由でファイルパスを読み取れませんか? "Unknown source"? 私は何が間違っているのか分かりません。

国名「ノイシュタット」として別のクラスのメソッドを呼び出すと、このメソッドは単に「0」を返します。 基本的には、この関数が特定の都市のIDを返すだけです。 名前はIDと一緒にJsonに保存されます。

編集: 理想的には、プロジェクト内にあるJSONファイルを解析できるようにしたいと考えています。 .getClass()。getResource( "/ path/to/json");を使用してみました。しかし、それは全く機能しませんでした。

EDIT:FIXED

package controllers; 

import java.io.BufferedReader; 
import java.io.FileNotFoundException; 
import java.io.FileReader; 
import java.io.IOException; 
import java.io.InputStream; 
import java.io.InputStreamReader; 
import java.io.Serializable; 
import java.net.URL; 
import java.util.logging.Level; 
import java.util.logging.Logger; 
import javax.enterprise.context.RequestScoped; 
import javax.enterprise.context.SessionScoped; 
import javax.inject.Named; 
import org.json.simple.JSONObject; 
import org.json.simple.parser.JSONParser; 
import org.json.simple.parser.ParseException; 

@Named(value = "cityID") 
@SessionScoped 
public class getCityIDs implements Serializable{ 



    JSONObject jsonObject; 
    public long getCityIDs(String name) { 

     try { 

      JSONParser parser = new JSONParser(); 

      InputStream in = getClass().getResourceAsStream("/dataSteden/stedenNamen1.json"); 

      try (BufferedReader br = new BufferedReader(new InputStreamReader(in))) { 
      String line; 
      while ((line = br.readLine()) != null) { 
       jsonObject = (JSONObject) parser.parse(line); 
       } 
      } 

      String travelName = (String) jsonObject.get("name"); 
      System.out.println("stad: " +travelName); 
      System.out.println("testttt"); 
      if(travelName.equals(name)){ 
       long id = (long) jsonObject.get("_id"); 
       System.out.println(id); 
       return id; 
      } else { 
       System.out.println("else"); 
       return 5; 
      } 

     } catch (FileNotFoundException ex) { 
      Logger.getLogger(getCityIDs.class.getName()).log(Level.SEVERE, null, ex); 
     } catch (IOException | ParseException ex) { 
      Logger.getLogger(getCityIDs.class.getName()).log(Level.SEVERE, null, ex); 
     } 
     System.out.println("einde functie"); 
     return 0; 
     // JSONObject jsonObject = (JSONObject) parser.parse(getClass().getResource("/json/city.list.json").toString()); 
    } 

    public String test(){ 
     return "hello world"; 
    } 
} 
+0

ソースが不明であるということは、simpleJSONライブラリのソースコードがあることを意味します。また、Java変数命名規則を守ってください。あなたのクラスは 'getCityIds'と呼ばれるべきではありません。しかし、この方法は可能です。 –

+0

最初の行で何を意味するのかわからない – aze45sq6d

+0

心配しないでください。 Javaスタックトレースは、使用しているJSONライブラリの行番号とファイル名を提供しようとしていますが、できません。それは、その出力で "Unknown source"が意味するものです。実際のエラーに関しては、有効なJSONが表示されているので、なぜそのエラーが発生しているのか分かりません。 –

答えて

5

あなたのデータは、したがって、あなたは、ファイルの行バイを読み取る必要があり、JSONParserにファイル全体を投げることができない行区切り

{"_id":707860,"name":"Hurzuf","country":"UA","coord":{"lon":34.283333,"lat":44.549999}} 
{"_id":519188,"name":"Novinki","country":"RU","coord":{"lon":37.666668,"lat":55.683334}} 
{"_id":1283378,"name":"Gorkhā","country":"NP","coord":{"lon":84.633331,"lat":28}} 

です各ラインをJSONObjectとして解析し、必要なキー値を抽出することができます。

+0

大いに感謝する! 今、私のプロジェクトにファイルがあると思います。 このプロジェクトを担当する人が増えているので、自分のコンピュータでローカルに呼びたくないです。しかし、私はそれをするように見えることはできません。理想的に私はこのようなものが欲しい:FileReader reader =新しいFileReader(this.getClass()。getResource( "/ json/city.list.json")); – aze45sq6d

+0

プロジェクトのsrc /フォルダのルートにあるjsonフォルダにあるファイルを持っている限り、あなたはそこにあるはずのファイルを持っていると思います。 –

+0

ソースパッケージの下に置きます。 FileReader reader =新しいFileReader(this.getClass()。getResource( "/ json/city.list")。toString()); しかし、それは私にnullpointerexceptionを与えています。それはローカルで今呼び出すときに働きます。行ごとに呼び出す – aze45sq6d

関連する問題