Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何从JSONArray解析JSON对象?_Java_Arrays_Json_Text - Fatal编程技术网

Java 如何从JSONArray解析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

我有一个非常大的JSON文件,格式如下:

[{"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,因为他在你之前提出了这个解决方案。