source

간단한 JSON 라이브러리를 사용하여 json 파일을 Java로 읽는 방법

gigabyte 2022. 10. 30. 17:52
반응형

간단한 JSON 라이브러리를 사용하여 json 파일을 Java로 읽는 방법

나는 이것을 읽고 싶다.JSONjson Simple Library를 사용하여 java 파일을 만듭니다.

나의JSON파일은 다음과 같습니다.

[  
    {  
        "name":"John",
        "city":"Berlin",
        "cars":[  
            "audi",
            "bmw"
        ],
        "job":"Teacher"
    },
    {  
        "name":"Mark",
        "city":"Oslo",
        "cars":[  
            "VW",
            "Toyata"
        ],
        "job":"Doctor"
    }
]

이 파일을 읽기 위해 작성한 Java 코드입니다.

package javaapplication1;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.Iterator;
import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import org.json.simple.parser.JSONParser;
import org.json.simple.parser.ParseException;

public class JavaApplication1 {
    public static void main(String[] args) {

        JSONParser parser = new JSONParser();

        try {     
            Object obj = parser.parse(new FileReader("c:\\file.json"));

            JSONObject jsonObject =  (JSONObject) obj;

            String name = (String) jsonObject.get("name");
            System.out.println(name);

            String city = (String) jsonObject.get("city");
            System.out.println(city);

            String job = (String) jsonObject.get("job");
            System.out.println(job);

            // loop array
            JSONArray cars = (JSONArray) jsonObject.get("cars");
            Iterator<String> iterator = cars.iterator();
            while (iterator.hasNext()) {
             System.out.println(iterator.next());
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (ParseException e) {
            e.printStackTrace();
        }
    }
}

단, 다음과 같은 예외가 있습니다.

스레드 "main" java.lang에 예외가 있습니다.ClassCastException: org.json.simple.JSONAray는 org.json.simple에 캐스팅할 수 없습니다.java application 1의 JSONObject.Java Application 1.main(Java Application 1.java:24)

누가 내가 뭘 잘못하고 있는지 말해줄래?파일 전체가 배열이며 파일 전체 배열에 개체와 다른 배열(자동차)이 있습니다.그러나 어레이 전체를 Java 어레이로 해석하는 방법을 모르겠습니다.내 코드에 없는 코드 라인을 누군가 도와줄 수 있으면 좋겠다.

감사해요.

파일 전체가 배열이며 파일 전체 배열에 객체 및 기타 배열(예: 자동차)이 있습니다.

말씀하신 것처럼 JSON BLOB의 가장 바깥쪽 레이어는 배열입니다.따라서 파서는 다음 명령을 반환합니다.JSONArray그 다음에,JSONObject어레이로부터의 s...

  JSONArray a = (JSONArray) parser.parse(new FileReader("c:\\exer4-courses.json"));

  for (Object o : a)
  {
    JSONObject person = (JSONObject) o;

    String name = (String) person.get("name");
    System.out.println(name);

    String city = (String) person.get("city");
    System.out.println(city);

    String job = (String) person.get("job");
    System.out.println(job);

    JSONArray cars = (JSONArray) person.get("cars");

    for (Object c : cars)
    {
      System.out.println(c+"");
    }
  }

자세한 내용은 json-simple decoding 예제 페이지의 "예 1"을 참조하십시오.

Jackson 라이브러리를 사용하면 json 파일을 Java Object로 변환할 수 있습니다.

ObjectMapper mapper = new ObjectMapper();
InputStream is = Test.class.getResourceAsStream("/test.json");
testObj = mapper.readValue(is, Test.class);

잭슨 데이터 바인드 추가:

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.9.0.pr2</version>
</dependency>

관련 필드를 사용하여 DTO 클래스를 만들고 JSON 파일을 읽습니다.

ObjectMapper objectMapper = new ObjectMapper();
ExampleClass example = objectMapper.readValue(new File("example.json"), ExampleClass.class);

Json File에서 읽기

public static ArrayList<Employee> readFromJsonFile(String fileName){
        ArrayList<Employee> result = new ArrayList<Employee>();

        try{
            String text = new String(Files.readAllBytes(Paths.get(fileName)), StandardCharsets.UTF_8);

            JSONObject obj = new JSONObject(text);
            JSONArray arr = obj.getJSONArray("employees");

            for(int i = 0; i < arr.length(); i++){
                String name = arr.getJSONObject(i).getString("name");
                short salary = Short.parseShort(arr.getJSONObject(i).getString("salary"));
                String position = arr.getJSONObject(i).getString("position");
                byte years_in_company = Byte.parseByte(arr.getJSONObject(i).getString("years_in_company")); 
                if (position.compareToIgnoreCase("manager") == 0){
                    result.add(new Manager(name, salary, position, years_in_company));
                }
                else{
                    result.add(new OrdinaryEmployee(name, salary, position, years_in_company));
                }
            }           
        }
        catch(Exception ex){
            System.out.println(ex.toString());
        }
        return result;
    }

구글 심플 라이브러리를 사용합니다.

<dependency>
    <groupId>com.googlecode.json-simple</groupId>
    <artifactId>json-simple</artifactId>
    <version>1.1.1</version>
</dependency>

샘플 코드는 다음과 같습니다.

public static void main(String[] args) {
    try {
        JSONParser parser = new JSONParser();
        //Use JSONObject for simple JSON and JSONArray for array of JSON.
        JSONObject data = (JSONObject) parser.parse(
              new FileReader("/resources/config.json"));//path to the JSON file.

        String json = data.toJSONString();
    } catch (IOException | ParseException e) {
        e.printStackTrace();
    }
}

JSONObject는 다음과 같은 단순한 JSON에 사용합니다.{"id":"1","name":"ankur"}및 JSONArray는 다음과 같은 JSON 어레이에 사용됩니다.[{"id":"1","name":"ankur"},{"id":"2","name":"mahajan"}].

같은 문제에 직면한 다른 사람에게도 도움이 될 수 있습니다.파일을 문자열로 로드한 다음 문자열을 jsonobject로 변환하여 값에 액세스할 수 있습니다.

import java.util.Scanner;
import org.json.JSONObject;
String myJson = new Scanner(new File(filename)).useDelimiter("\\Z").next();
JSONObject myJsonobject = new JSONObject(myJson);

Gson은 다음과 같이 사용할 수 있습니다.

public Object getObjectFromJsonFile(String jsonData, Class classObject) {
    Gson gson = new Gson();
    JsonParser parser = new JsonParser();
    JsonObject object = (JsonObject) parser.parse(jsonData);
    return gson.fromJson(object, classObject);
}
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;

import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import org.json.simple.parser.JSONParser;
import org.json.simple.parser.ParseException;

public class Delete_01 {
    public static void main(String[] args) throws FileNotFoundException,
            IOException, ParseException {

        JSONParser parser = new JSONParser();
        JSONArray jsonArray = (JSONArray) parser.parse(new FileReader(
                "delete_01.json"));

        for (Object o : jsonArray) {
            JSONObject person = (JSONObject) o;

            String strName = (String) person.get("name");
            System.out.println("Name::::" + strName);

            String strCity = (String) person.get("city");
            System.out.println("City::::" + strCity);

            JSONArray arrays = (JSONArray) person.get("cars");
            for (Object object : arrays) {
                System.out.println("cars::::" + object);
            }
            String strJob = (String) person.get("job");
            System.out.println("Job::::" + strJob);
            System.out.println();

        }

    }
}

이 예도 도움이 되길 바랍니다.

아래 json 어레이의 예에 대해서도 다음과 같이 Java 코딩을 실시했습니다.

다음은 json 데이터 형식입니다: "EMPJONDATA.json"으로 저장됩니다.

[{"EMPNO":275172", "EMP_NAME":"Rehan", "DOB":29-02-192", "DOJ":"10-06-2013", "ROLE":JAVAVA 개발자",

{"EMPNO":275173",EMP_NAME":GK","DOB":10-02-1992", "DOJ":11-07-2013", "ROLE":WINDOWS 관리자" ,

{"EMPNO":275174", "EMP_NAME":"Abiram", "DOB":10-04-1992", "DOJ":12-08-2013", "ROLE":"Project Analyst"}

{"EMPNO":275174", "EMP_NAME":모하메드 무시", "DOB":10-04-1992", "DOJ":12-08-2013", "ROLE":"PROJECT Analyst"}]

public class Jsonminiproject {

public static void main(String[] args) {

      JSONParser parser = new JSONParser();

    try {
        JSONArray a = (JSONArray) parser.parse(new FileReader("F:/JSON DATA/EMPJSONDATA.json"));
        for (Object o : a)
        {
            JSONObject employee = (JSONObject) o;

            Long no = (Long) employee.get("EMPNO");
            System.out.println("Employee Number : " + no);

            String st = (String) employee.get("EMP_NAME");
            System.out.println("Employee Name : " + st);

            String dob = (String) employee.get("DOB");
            System.out.println("Employee DOB : " + dob);

            String doj = (String) employee.get("DOJ");
            System.out.println("Employee DOJ : " + doj);

            String role = (String) employee.get("ROLE");
            System.out.println("Employee Role : " + role);

            System.out.println("\n");

        }


    } catch (FileNotFoundException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (ParseException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }




}

}
package com.json;

import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.Iterator;

import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import org.json.simple.parser.JSONParser;
import org.json.simple.parser.ParseException;

public class ReadJSONFile {

    public static void main(String[] args) {

        JSONParser parser = new JSONParser();

        try {
            Object obj = parser.parse(new FileReader("C:/My Workspace/JSON Test/file.json"));

            JSONArray array = (JSONArray) obj;
            JSONObject jsonObject = (JSONObject) array.get(0);

            String name = (String) jsonObject.get("name");
            System.out.println(name);

            String city = (String) jsonObject.get("city");
            System.out.println(city);

            String job = (String) jsonObject.get("job");
            System.out.println(job);

            // loop array
            JSONArray cars = (JSONArray) jsonObject.get("cars");
            Iterator<String> iterator = cars.iterator();
            while (iterator.hasNext()) {
                System.out.println(iterator.next());
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (ParseException e) {
            e.printStackTrace();
        }
    }

}

이 문제는 JSONObject 클래스의 org.json 라이브러리를 가져올 때 발생합니다.대신 org.json.simple 라이브러리를 Import해야 합니다.

private static final JsonParser JSON_PARSER = new JsonParser();    
private static final String FILE_PATH = "configuration/data.json";

private JsonObject readJsonDataFromFile() {
    try {
        File indexFile = new File(FILE_PATH);
        String fileData = Files.toString(indexFile, Charsets.UTF_8);
        return (JsonObject) JSON_PARSER.parse(fileData);
    } catch (IOException | JsonParseException e) {
        String error = String.format("Error while reading file %s", FILE_PATH);
        log.error(error);
        throw new RuntimeException(error, e);
    }
}
public class JsonParser {

    public static JSONObject parse(String file) {
        InputStream is = JsonParser.class.getClassLoader().getResourceAsStream(file);
        assert is != null;
        return new JSONObject(new JSONTokener(is));
    }
}
// Read Json 
    JSONObject deviceObj = new JSONObject(JsonParser.parse("Your Json filename").getJSONObject(deviceID).toString());

논리를 실행하여 반복하다

다음은 귀사의 문제 설명에 대한 효과적인 해결 방법입니다.

File file = new File("json-file.json");
    JSONParser parser = new JSONParser();
    Object obj = parser.parse(new FileReader(file));
    JSONArray jsonArray = new JSONArray(obj.toString());
    for (int i = 0; i < jsonArray.length(); i++) {
      JSONObject jsonObject = jsonArray.getJSONObject(i);
      System.out.println(jsonObject.get("name"));
      System.out.println(jsonObject.get("city"));
      System.out.println(jsonObject.get("job"));
      jsonObject.getJSONArray("cars").forEach(System.out::println);
    }

샘플 Json

{
    "per_page": 3,
    "total": 12,
    "data": [{
            "last_name": "Bluth",
            "id": 1,
            "avatar": "https://s3.amazonaws.com/uifaces/faces/twitter/calebogden/128.jpg",
            "first_name": "George"
        },
        {
            "last_name": "Weaver",
            "id": 2,
            //"avatar": "https://s3.amazonaws.com/uifaces/faces/twitter/josephstein/128.jpg",
            "first_name": "Janet"
        },
        {
            "last_name": "Wong",
            "id": 3,
            //"avatar": "https://s3.amazonaws.com/uifaces/faces/twitter/olegpogodaev/128.jpg",
            "first_name": "Emma"
        }
    ],
    "page": 1,
    "total_pages": 4
}

첫 번째 If 문은 본문에서 단일 데이터를 변환합니다.두 번째 If 문은 JsonArray 개체를 구별합니다.

public static String getvalueJpath(JSONObject responseJson, String Jpath ) {
        Object obj = responseJson;
        for(String s : Jpath.split("/"))
            if (s.isEmpty())
                if(!(s.contains("[") || s.contains("]")))
                    obj = ((JSONObject) obj).get(s);
                else
                    if(s.contains("[") || s.contains("]"))
                        obj = ((JSONArray)((JSONObject)obj).get(s.split("\\[")[0])).get(Integer.parseInt(s.split("//[")[1].replaceAll("]", "")));

        return obj.toString();
    }
}

잭슨 라이브러리를 사용한 솔루션.JSONLint.com에서 json을 확인하고 Jackson을 사용하여 이 문제를 해결.아래는 같은 코드입니다.

 Main Class:-

String jsonStr = "[{\r\n" + "       \"name\": \"John\",\r\n" + "        \"city\": \"Berlin\",\r\n"
                + "         \"cars\": [\r\n" + "            \"FIAT\",\r\n" + "          \"Toyata\"\r\n"
                + "     ],\r\n" + "     \"job\": \"Teacher\"\r\n" + "   },\r\n" + " {\r\n"
                + "     \"name\": \"Mark\",\r\n" + "        \"city\": \"Oslo\",\r\n" + "        \"cars\": [\r\n"
                + "         \"VW\",\r\n" + "            \"Toyata\"\r\n" + "     ],\r\n"
                + "     \"job\": \"Doctor\"\r\n" + "    }\r\n" + "]";

        ObjectMapper mapper = new ObjectMapper();

        MyPojo jsonObj[] = mapper.readValue(jsonStr, MyPojo[].class);

        for (MyPojo itr : jsonObj) {

            System.out.println("Val of getName is: " + itr.getName());
            System.out.println("Val of getCity is: " + itr.getCity());
            System.out.println("Val of getJob is: " + itr.getJob());
            System.out.println("Val of getCars is: " + itr.getCars() + "\n");

        }

POJO:

public class MyPojo {

private List<String> cars = new ArrayList<String>();

private String name;

private String job;

private String city;

public List<String> getCars() {
    return cars;
}

public void setCars(List<String> cars) {
    this.cars = cars;
}

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

public String getJob() {
    return job;
}

public void setJob(String job) {
    this.job = job;
}

public String getCity() {
    return city;
}

public void setCity(String city) {
    this.city = city;
} }

  RESULT:-
         Val of getName is: John
         Val of getCity is: Berlin
         Val of getJob is: Teacher
         Val of getCars is: [FIAT, Toyata]

          Val of getName is: Mark
          Val of getCity is: Oslo
          Val of getJob is: Doctor
          Val of getCars is: [VW, Toyata]

당신의 json 파일은 다음과 같습니다.

여기에 이미지 설명 입력

import java.io.*;
import java.util.*;
import org.json.simple.*;
import org.json.simple.parser.*;
public class JSONReadFromTheFileTest {
   public static void main(String[] args) {
      JSONParser parser = new JSONParser();
      try {
         Object obj = parser.parse(new FileReader("/Users/User/Desktop/course.json"));
         JSONObject jsonObject = (JSONObject)obj;
         String name = (String)jsonObject.get("Name");
         String course = (String)jsonObject.get("Course");
         JSONArray subjects = (JSONArray)jsonObject.get("Subjects");
         System.out.println("Name: " + name);
         System.out.println("Course: " + course);
         System.out.println("Subjects:");
         Iterator iterator = subjects.iterator();
         while (iterator.hasNext()) {
            System.out.println(iterator.next());
         }
      } catch(Exception e) {
         e.printStackTrace();
      }
   }
}

출력은

Name: Raja
Course: MCA
Subjects:
subject1: MIS
subject2: DBMS
subject3: UML

여기서부터 맡다

  try {
      Object obj = parser.parse(new FileReader("C:/Local Disk/file.json"));

     // JSONArray array = (JSONArray) obj;
      JSONObject jsonObject = (JSONObject) obj;
      
      JSONObject orchestration = (JSONObject) jsonObject.get("orchestration");
     

      JSONObject trigger = (JSONObject) orchestration.get("trigger-definition");
     

      JSONObject schedule = (JSONObject) trigger.get("schedule");
    
       JSONObject trade = (JSONObject) schedule.get("trade-query");
    
     // loop array
      JSONArray filter = (JSONArray) trade.get("filter");
   
  
      for (Object o : filter) {
          JSONObject person = (JSONObject) o;

          String strName = (String) person.get("name");
          System.out.println("Name::::" + strName);

          String operand = (String) person.get("operand");
          System.out.println("City::::" + operand);

          String value = (String) person.get("value");
          System.out.println("value::::" + value);
      }
     
      JSONArray parameter = (JSONArray) trade.get("parameter");
      for (Object o : parameter) {
          JSONObject person = (JSONObject) o;

          String strName = (String) person.get("name");
          System.out.println("Name::::" + strName);

          String value = (String) person.get("value");
          System.out.println("value::::" + value);
      }


  } catch (FileNotFoundException e) {
      e.printStackTrace();
  } catch (IOException e) {
      e.printStackTrace();
  } catch (ParseException e) {
      e.printStackTrace();
  }

}

  try {
      //Object obj = parser.parse(new FileReader("C:/Local Disk/file.json"));
      
       // create object mapper instance
        ObjectMapper mapper = new ObjectMapper();

        // convert JSON string to Book object
        Object obj = mapper.readValue(Paths.get("C:/Local Disk/file.json").toFile(), Object.class);

        // print book
        System.out.println(obj);

        String jsonInString = new Gson().toJson(obj);
        JSONObject mJSONObject = new JSONObject(jsonInString);
        
        System.out.println("value::::" + mJSONObject);  
      
      JSONObject orchestration = (JSONObject) mJSONObject.get("orchestration");
     

      JSONObject trigger = (JSONObject) orchestration.get("trigger-definition");
     

      JSONObject schedule = (JSONObject) trigger.get("schedule");
    
       JSONObject trade = (JSONObject) schedule.get("trade-query");
    
     // loop array
      JSONArray filter = (JSONArray) trade.get("filter");
   
  
      for (Object o : filter) {
          JSONObject person = (JSONObject) o;

          String strName = (String) person.get("name");
          System.out.println("Name::::" + strName);

          String operand = (String) person.get("operand");
          System.out.println("City::::" + operand);

          String value = (String) person.get("value");
          System.out.println("value::::" + value);
      }
     
      JSONArray parameter = (JSONArray) trade.get("parameter");
      for (Object o : parameter) {
          JSONObject person = (JSONObject) o;

          String strName = (String) person.get("name");
          System.out.println("Name::::" + strName);

          String value = (String) person.get("value");
          System.out.println("value::::" + value);
      }


  } catch (FileNotFoundException e) {
      e.printStackTrace();
  } catch (IOException e) {
      e.printStackTrace();
  }
  
  

  

readAllBytes를 사용할 수 있습니다.

return String(Files.readAllBytes(Paths.get(filePath)),StandardCharsets.UTF_8);

언급URL : https://stackoverflow.com/questions/10926353/how-to-read-json-file-into-java-with-simple-json-library

반응형