1

1つのファイルinput.txtに複数のJSONがあります。

{"Atlas":{"location":"lille","lat":28.4,"long":51.7,"country":"FR"}}
{"Atlas":{"location":"luxum","lat":24.1,"long":54.7,"country":"LU"}}
{"Atlas":{"location":"ghent","lat":28.1,"long":50.1,"country":"BE"}}

注:これらはコンマ( "、")で区切られておらず、配列ではありません。これらは有効な単一のJSONです。

アウトプットを得ることができるはずだと思います。

以下の私のコードはエラーを表示せず、出力も提供しませんか?ここで何が問題になっていますか?

これは私のコードです:

 class Loc{
        private String location;
        private Long lat;
        private Long long;
        private String country;

    //getter and setter methods
    }
    public class JsonReader {
        public static void main(String[] args) throws ParseException {

            try {
                BufferedReader br= new BufferedReader(new FileReader("C:\\input.txt"));
                String jsonTxt = IOUtils.toString( br );                
                JSONParser parser = new JSONParser();                               
                String line=null;
                while ((line = br.readLine()) != null)
                {
                    Loc emp = (Loc) (new JSONParser().parse(jsonTxt));
                    System.out.printf("%s",emp.getLocation());
                    System.out.printf("\t%d",emp.getlat());
                    System.out.printf("\t%d",emp.getLong());
                    System.out.printf("\t%s",emp.getCountry()"\n");
            }
    }catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

}}
4

3 に答える 3

2

あなたは間違ったことを解析しています。lineではなく解析する必要がありますjsonTextlineBufferedReader から読み込まれた実際の行です。

于 2012-08-06T16:48:47.723 に答える
1

jsonTxt ではなく、行を解析する必要があるようです

Loc emp = (Loc) (new JSONParser().parse(jsonTxt));
于 2012-08-06T16:49:18.983 に答える
1

IOUtils.toString(BufferedReader)の結果をに渡していますJSONParser。ご指摘のとおり、ファイルの内容全体は有効な JSON ではありません。各行が有効な JSON であると仮定して、データを 1 行ずつパーサーに渡します。あなたのコードは、これを行うようにすでに設定されています。

あなたのループでline、パーサーに渡して、ものを取り除きIOUtilsます。

だと思いJSONParserますorg.json.simple.parser.JSONParser。もしそうなら、それはあなたの側でそれ以上の作業をしなければあなたのためにあなたのオブジェクトを構築しません.JSONを解析し、、などLocのツリーを返すだけですJSONObjectsJSONArrayJSONAware

または、JSON を Java オブジェクトに解析するためのJacksonまたはGSONを調べてください。

また、Locメンバーに名前を付けることはできませんlong。これは Java キーワードであり、コードのコンパイルを妨げます。

于 2012-08-06T05:53:59.670 に答える