Java 如何从JSONArray解析JSON对象?
我有一个非常大的JSON文件,格式如下:Java 如何从JSONArray解析JSON对象?,java,arrays,json,text,Java,Arrays,Json,Text,我有一个非常大的JSON文件,格式如下: [{"fullname": "name1", "id": "123"}, {"fullname": "name2", "id": "245"}, {"fullname": "name3", "id": "256"}] 它看起来像一个JSONArray。所有记录都写在同一行中 你能帮我怎么用Java解析这个文件吗。我想读取每个JSON对象并显示所有全名和ID。以下是我的尝试,但我的代码无效: import org.apache.commons.lang3
[{"fullname": "name1", "id": "123"}, {"fullname": "name2", "id": "245"}, {"fullname": "name3", "id": "256"}]
它看起来像一个JSONArray。所有记录都写在同一行中
你能帮我怎么用Java解析这个文件吗。我想读取每个JSON对象并显示所有全名和ID。以下是我的尝试,但我的代码无效:
import org.apache.commons.lang3.StringEscapeUtils;
import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import org.json.simple.parser.JSONParser;
import org.json.simple.parser.ParseException;
public class JSONFileReaderDriver {
public static void main(String[] args) throws FileNotFoundException,
IOException, ParseException
{
String filename="Aarau";
String src="C:\\"+filename+".json";
JSONParser parser = new JSONParser();
JSONObject obj;
try
{
BufferedReader br=new BufferedReader (new FileReader(src));
obj = (JSONObject) new JSONParser().parse(row);
String fullname=obj.get("fullname");
String id=obj.get("id");
System.out.println ("fullname: "+fullname+" id: "+id);
}catch(Exception e)
{e.printStackTrace();}
br.close();
}
}
我建议使用Jackson,特别是Jackson流式API,它非常适合解析这样的大型数组
看到这个答案:我建议使用Jackson,特别是Jackson流式API,它非常适合解析这样的大型数组
看到这个答案:您可以使用Json.simple java api,下面是对您有帮助的代码
byte[] bFile = Files.readAllBytes(new File("C:/xyz.json").toPath());
JSONArray root = (JSONArray) JSONValue.parseWithException(bFile);
JSONObject rootObj = (JSONObject) root.get(0);
您可以根据键从JSONObject获取值,这还取决于json的格式,因为可能存在嵌套的json数据。因此,您必须相应地提取数据。除此之外,您还可以使用jackson解析器api或GSON 您可以使用Json.simple java api,下面是对您有帮助的代码
byte[] bFile = Files.readAllBytes(new File("C:/xyz.json").toPath());
JSONArray root = (JSONArray) JSONValue.parseWithException(bFile);
JSONObject rootObj = (JSONObject) root.get(0);
您可以根据键从JSONObject获取值,这还取决于json的格式,因为可能存在嵌套的json数据。因此,您必须相应地提取数据。除此之外,您还可以使用jackson解析器api或GSON 您的json是一个JSONArray,因此在解析它时,需要将其解析为JSONArray
您的json是一个JSONArray,因此在解析它时,需要将其解析为JSONArray
好了,伙计们…刚刚解决了我的问题。我张贴的解决方案,以防有人再次遇到相同的问题,可以使用我的解决方案。我的解决方案的部分动机是拉胡尔·拉巴迪亚。谢谢,伙计
try{
row=br.readLine();
JSONArray root = (JSONArray) JSONValue.parseWithException(row);
for (int i=0;i<root.size();i++)
{
JSONObject rootObj = (JSONObject) root.get(i);
String fullname=(String) rootObj.get("fullname");
System.out.println (fullname);
}
}catch(Exception e)
{
e.printStackTrace();
}
试试看{
行=br.readLine();
JSONArray根=(JSONArray)JSONValue.parseWithException(行);
对于(int i=0;i好的,伙计们…刚刚解决了我的问题。我正在发布解决方案,以防有人再次遇到相同的问题,可以使用我的解决方案。我的解决方案部分是由Rahul Rabhadiya推动的。谢谢,伙计
try{
row=br.readLine();
JSONArray root = (JSONArray) JSONValue.parseWithException(row);
for (int i=0;i<root.size();i++)
{
JSONObject rootObj = (JSONObject) root.get(i);
String fullname=(String) rootObj.get("fullname");
System.out.println (fullname);
}
}catch(Exception e)
{
e.printStackTrace();
}
试试看{
行=br.readLine();
JSONArray根=(JSONArray)JSONValue.parseWithException(行);
对于(int i=0;i使您的生活变得轻松,并使用对象映射器
。
这样,您只需定义一个与json对象具有相同属性的Pojo
在您的情况下,您需要一个如下所示的Pojo:
public class Person{
private String fullname;
private int id;
public Person(String fullname, int id) {
this.fullname = fullname;
this.id = id;
}
public String getFullname() {
return fullname;
}
public int getId() {
return id;
}
}
因此,您只需执行以下操作:
ObjectMapper objectMapper = new ObjectMapper();
List<Person> persons = objectMapper.readValue(myInputStream, TypeFactory.defaultInstance().constructCollectionType(List.class, Person.class));
ObjectMapper ObjectMapper=new ObjectMapper();
List persons=objectMapper.readValue(myInputStream,TypeFactory.defaultInstance().ConstructionCollectionType(List.class,Person.class));
这是一种无麻烦且类型安全的方法
需要依赖项:
com.fasterxml.jackson.core
杰克逊数据绑定
使用对象映射器使您的生活变得轻松。
这样,您只需定义一个与json对象具有相同属性的Pojo
在您的情况下,您需要一个如下所示的Pojo:
public class Person{
private String fullname;
private int id;
public Person(String fullname, int id) {
this.fullname = fullname;
this.id = id;
}
public String getFullname() {
return fullname;
}
public int getId() {
return id;
}
}
因此,您只需执行以下操作:
ObjectMapper objectMapper = new ObjectMapper();
List<Person> persons = objectMapper.readValue(myInputStream, TypeFactory.defaultInstance().constructCollectionType(List.class, Person.class));
ObjectMapper ObjectMapper=new ObjectMapper();
List persons=objectMapper.readValue(myInputStream,TypeFactory.defaultInstance().ConstructionCollectionType(List.class,Person.class));
这是一种无麻烦且类型安全的方法
需要依赖项:
com.fasterxml.jackson.core
杰克逊数据绑定
如果这是一种简单的解析方法,您是否计划使用gson之类的库?您的代码以何种方式不起作用?您是否看到任何错误?“但我的代码不起作用”-具体是什么不起作用?是否有任何错误或异常?错误:位置0处的意外标记结尾。位于org.json.simple.parser.JSONParser.parse(JSONParser.java:257)在org.json.simple.parser.JSONParser.parse(JSONParser.java:81)在org.json.simple.parser.JSONParser.parse(JSONParser.java:75)在JSONReader.JSONFileReaderDriver.main(JSONFileReaderDriver.java:56)[…]解析(行);
-什么是行
?如果这是一种容易解析的方法,您是否计划使用像gson这样的库?您的代码以什么方式不起作用?您是否看到任何错误?“但我的代码不起作用”-具体是什么不起作用?是否存在任何错误或异常?错误:位置0处的文件意外标记结尾。org.json.simple.parser.JSONParser.parse(JSONParser.java:257)org.json.simple.parser.JSONParser.parse(JSONParser.java:81)org.json.simple.parser.JSONParser.parse(JSONParser.java:75)在JSONReader.JSONFileReaderDriver.main(JSONFileReaderDriver.java:56)[…].parse(行)
-什么是行
?你应该把答案归功于Rahul Rabhadiya,因为他在你之前提出了这个解决方案。你应该把答案归功于Rahul Rabhadiya,因为他在你之前提出了这个解决方案。