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

JSONjson 간단한 라이브러리를 사용하여 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.JSONArray를 javaapplication1.JavaApplication1.main (JavaApplication1.java:24)에서 org.json.simple.JSONObject로 캐스트 할 수 없습니다.

누군가 내가 뭘 잘못하고 있는지 말해 줄 수 있습니까? 전체 파일은 배열이며 파일의 전체 배열에는 객체와 다른 배열 (자동차)이 있습니다. 하지만 전체 배열을 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 디코딩 예제 페이지의 “예제 1″을 참조하십시오.


답변

jackson 라이브러리를 사용하고이 3 줄을 사용하여 json 파일을 Java Object로 변환 할 수 있습니다.

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


답변

Jackson 데이터 바인드 추가 :

<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);


답변

JsonFile에서 읽기

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;
    }


답변

이를 위해 Gson 을 사용할 수 있습니다 .
GSONJava 객체를 JSON표현 으로 변환하는 데 사용할 수있는 Java 라이브러리입니다 . 또한 JSON문자열을 동등한 Java 객체 로 변환하는 데 사용할 수 있습니다 .

JSON을 Java로 변환을 살펴보십시오.


답변

google-simple 라이브러리를 사용하십시오.

<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();
    }
}

간단한 JSON과 같은 JSONObject를 사용 {"id":"1","name":"ankur"}하고 [{"id":"1","name":"ankur"},{"id":"2","name":"mahajan"}].


답변

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();

        }

    }
}