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你不应该解析jsonTextline是从 BufferedReader 读取的实际行。

于 2012-08-06T16:48:47.723 回答
1

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

在您的循环中,传递line给解析器,然后摆脱这些IOUtils东西。

我认为JSONParserorg.json.simple.parser.JSONParser。如果是这样,如果您不做更多工作,它不会Loc为您构建对象:它只解析 JSON 并返回 , 等树JSONObjectsJSONArray请参阅此处和有关JSONAware 此处的内容。

或者查看JacksonGS​​ON将您的 JSON 解析为 java 对象。

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

于 2012-08-06T05:53:59.670 回答
1

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

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