繁体   English   中英

Java中的多个JSON解析

[英]Multiple JSON parsing in Java

我在单个文件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();
        }

}}

你正在解析错误的东西。 你应该解析line而不是jsonText line是从BufferedReader读入的实际行。

您将IOUtils.toString(BufferedReader)的结果传递给JSONParser 如您所知,整个文件内容无效JSON。 假设每一行都是有效的JSON,将数据逐行传递给解析器。 您的代码已经设置为执行此操作。

在你的循环中,将line传递给解析器,并摆脱IOUtils东西。

我假设JSONParserorg.json.simple.parser.JSONParser 如果是这样,它不会建立自己的Loc无需您再为你的对象:只解析JSON和返回的树JSONObjectsJSONArray等见这里和对位JSONAware 这里

或者查看JacksonGSON将JSON解析为java对象。

此外,您的Loc成员不能命名为long :这是一个java关键字,将阻止您的代码编译。

看起来你需要解析行,而不是jsonTxt

Loc emp = (Loc) (new JSONParser().parse(jsonTxt));

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM