[java] JSON에서 Java 클래스를 생성 하시겠습니까?

Java Maven 프로젝트에서 JSON에서 Java 소스 파일을 어떻게 생성합니까? 예를 들어 우리는

{
  "firstName": "John",
  "lastName": "Smith",
  "address": {
    "streetAddress": "21 2nd Street",
     "city": "New York"
  }
}

우리가 실행할 때 mvn generate-sources다음과 같은 것을 생성하기를 원합니다.

class Address  {
    JSONObject mInternalJSONObject;

    Address (JSONObject json){
        mInternalJSONObject = json;
    }

    String  getStreetAddress () {
        return mInternalJSONObject.getString("streetAddress");
    }

    String  getCity (){
        return mInternalJSONObject.getString("city");
    }
}

class Person {
    JSONObject mInternalJSONObject;

    Person (JSONObject json){
        mInternalJSONObject = json;
    }

    String  getFirstName () {
        return mInternalJSONObject.getString("firstName");
    }

    String  getLastName (){
        return mInternalJSONObject.getString("lastName");
    }

    Address getAddress (){
        return Address(mInternalJSONObject.getString("address"));
    }
}

Java 개발자로서,이를 위해 어떤 XML 라인을 작성해야 pom.xml합니까?



답변

jsonschema2pojo 플러그인을 사용해보십시오 .

        <plugin>
            <groupId>org.jsonschema2pojo</groupId>
            <artifactId>jsonschema2pojo-maven-plugin</artifactId>
            <version>1.0.2</version>
            <configuration>
                <sourceDirectory>${basedir}/src/main/resources/schemas</sourceDirectory>
                <targetPackage>com.myproject.jsonschemas</targetPackage>
                <sourceType>json</sourceType>
            </configuration>
            <executions>
                <execution>
                    <goals>
                        <goal>generate</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>

<sourceType>json</sourceType>커버 소스가 (영업 이익 등) JSON 인 경우. 실제 json 스키마가있는 경우이 행을 제거하십시오.

이 질문을 받았을 때 ’09 년 12 월 이후 두 가지 일이 발생했습니다.

  • JSON 스키마 사양은 많은에 이동했습니다. 아직 초안이지만 아직 완성되지 않았으며 이제는 구조 규칙을 지정하는 실행 가능한 도구입니다.

  • 최근에 문제를 해결하기 위해 특별히 고안된 새로운 오픈 소스 프로젝트 인 jsonschema2pojo를 시작했습니다 . jsonschema2pojo 도구는 json 스키마 문서를 가져와 DTO 스타일 Java 클래스 (.java 소스 파일 형식)를 생성합니다. 이 프로젝트는 아직 성숙하지는 않았지만 이미 json 스키마의 가장 유용한 부분을 다루고 있습니다. 개발을 추진하는 데 도움이되는 사용자의 의견을 더 찾고 있습니다. 지금 명령 행에서 또는 Maven 플러그인으로 도구를 사용할 수 있습니다.

도움이 되었기를 바랍니다!


답변

Jackson (가장 인기있는 라이브러리)을 사용하는 경우 시도하십시오

https://github.com/astav/JsonToJava

공개 소스와 누구나 기여할 수 있어야합니다.

요약

제공된 샘플 json 데이터를 기반으로 스키마를 추론하고 필요한 Java 데이터 구조를 생성하는 JsonToJava 소스 클래스 파일 생성기

실제 코드를 작성하기 전에 팀이 Json을 먼저 생각하도록 권장합니다.

풍모

  • 임의로 복잡한 계층 구조에 대한 클래스를 생성 할 수 있습니다 (재귀 적으로).
  • 기존 Java 클래스를 읽을 수 있으며 해당 구조로 직렬화 해제 할 수있는 경우
  • 모호한 사례가 존재하면 사용자 입력을 요구합니다

답변

중첩 된 객체 또는 중첩 된 객체 배열을 포함하여 JSON을 사용하고 Jackson 주석이있는 Java 소스를 생성 하는 온라인 도구 가 있습니다.


답변

최근 프로젝트 로이 오래된 질문에 대답 ;-).

현재 가장 좋은 해결책은 아마도 JsonSchema2Pojo입니다 .

Json Schema는 거의 사용하지 않았지만 일반 Json에서도 거의 사용하지 않습니다. Ant 및 Maven 플러그인과 온라인 테스트 애플리케이션을 제공합니다. 은 도구에 대한 아이디어를 제공 할 수 있습니다. Json Tweet을 넣고 모든 포함 클래스 (Tweet, User, Location 등)를 생성했습니다.

우리는 Agorava 프로젝트에서 소셜 미디어 매핑을 생성하고 API의 지속적인 진화를 따라갈 것입니다.


답변

도와 주신 모든 분들께 감사드립니다.
나에게이 스크립트는 도움이되었다. 플랫 JSON 만 처리하고 유형을 처리하지 않지만 일부 루틴을 자동화합니다.

  String str =
        "{"
            + "'title': 'Computing and Information systems',"
            + "'id' : 1,"
            + "'children' : 'true',"
            + "'groups' : [{"
                + "'title' : 'Level one CIS',"
                + "'id' : 2,"
                + "'children' : 'true',"
                + "'groups' : [{"
                    + "'title' : 'Intro To Computing and Internet',"
                    + "'id' : 3,"
                    + "'children': 'false',"
                    + "'groups':[]"
                + "}]"
            + "}]"
        + "}";



    JSONObject json = new JSONObject(str);
    Iterator<String> iterator =  json.keys();

    System.out.println("Fields:");
    while (iterator.hasNext() ){
       System.out.println(String.format("public String %s;", iterator.next()));
    }

    System.out.println("public void Parse (String str){");
    System.out.println("JSONObject json = new JSONObject(str);");

    iterator  = json.keys();
    while (iterator.hasNext() ){
       String key = iterator.next();
       System.out.println(String.format("this.%s = json.getString(\"%s\");",key,key ));

    System.out.println("}");


답변

나는 이것이 오래된 질문이라는 것을 알고 있지만, 스스로 답을 찾으려고 시도하면서 넘어졌습니다.

온라인 json-pojo 생성기 (jsongen)를 언급하는 대답은 좋지만 명령 줄에서 실행할 수 있고 더 조정할 수있는 것이 필요했습니다.

그래서 샘플 JSON 파일을 가져 와서 POJO를 생성하는 매우 해킹 된 루비 스크립트를 작성했습니다. Java 예약 키워드와 일치하는 필드를 처리하지 않는 등 여러 가지 제한 사항이 있지만 많은 경우 충분합니다.

기본적으로 생성 된 코드는 Jackson과 함께 사용하기 위해 주석을 달지만 스위치를 사용하여 끌 수 있습니다.

github에서 코드를 찾을 수 있습니다 : https://github.com/wotifgroup/json2pojo


답변

내가 아는 한 그러한 도구는 없습니다. 아직.

주된 이유는 XML과는 달리 (XML 스키마와 XML과 POJO 정의 사이에 요청하는 것을 수행하는 ‘xjc’와 같은 도구)와 달리 스키마 언어가 완전히 기능하지 않기 때문입니다. JSON 스키마는 있지만 실제 유형 정의 (JSON 구조에 중점)를 거의 지원하지 않으므로 Java 클래스를 생성하기가 까다로울 수 있습니다. 그러나 아마도 여전히 가능합니다. 일부 명명 규칙이 정의되어 생성을 지원하는 데 사용되는 경우

그러나 이것은 상당히 자주 요청되는 것입니다 (필요한 JSON 도구 프로젝트의 메일 링리스트에서). 누군가가 가까운 장래에 그러한 도구를 작성할 것이라고 생각합니다.

그래서 나는 그것이 그 자체로 나쁜 생각이라고 생각하지 않습니다 (또한 : 모든 사용 사례에 대해 좋은 생각은 아니며, 당신이하고 싶은 것에 달려 있습니다).