我在单个文件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();
}
}}
答案 0 :(得分:2)
你正在解析错误的东西。您应该解析line
而不是jsonText
。 line
是从BufferedReader读入的实际行。
答案 1 :(得分:1)
您将IOUtils.toString(BufferedReader)
的结果传递给JSONParser
。如您所知,整个文件内容无效JSON。假设每一行都是有效的JSON,将数据逐行传递给解析器。您的代码已经设置为执行此操作。
在循环中,将line
传递给解析器,并删除IOUtils
内容。
我认为JSONParser
是org.json.simple.parser.JSONParser
。如果是这样,它将不会为您构建您的Loc
对象而不需要您做更多的工作:它只解析JSON并返回JSONObjects
,JSONArray
等树。请参阅{ {3}}以及JSONAware
here。
或者查看here或Jackson将JSON解析为java对象。
此外,您的Loc
成员无法命名为long
:这是一个java关键字,会阻止您的代码编译。
答案 2 :(得分:1)
看起来你需要解析行,而不是jsonTxt
Loc emp = (Loc) (new JSONParser().parse(jsonTxt));