programing

잭슨을 사용하여 Java 객체를 JSON으로 변환

prostudy 2022. 7. 30. 11:27
반응형

잭슨을 사용하여 Java 객체를 JSON으로 변환

JSON을 다음과 같이 만들고 싶다.

{
    "information": [{
        "timestamp": "xxxx",
        "feature": "xxxx",
        "ean": 1234,
        "data": "xxxx"
    }, {
        "timestamp": "yyy",
        "feature": "yyy",
        "ean": 12345,
        "data": "yyy"
    }]
}

지금까지의 코드:

import java.util.List;

public class ValueData {

    private List<ValueItems> information;

    public ValueData(){

    }

    public List<ValueItems> getInformation() {
        return information;
    }

    public void setInformation(List<ValueItems> information) {
        this.information = information;
    }

    @Override
    public String toString() {
        return String.format("{information:%s}", information);
    }

}

그리고.

public class ValueItems {

    private String timestamp;
    private String feature;
    private int ean;
    private String data;


    public ValueItems(){

    }

    public ValueItems(String timestamp, String feature, int ean, String data){
        this.timestamp = timestamp;
        this.feature = feature;
        this.ean = ean;
        this.data = data;
    }

    public String getTimestamp() {
        return timestamp;
    }

    public void setTimestamp(String timestamp) {
        this.timestamp = timestamp;
    }

    public String getFeature() {
        return feature;
    }

    public void setFeature(String feature) {
        this.feature = feature;
    }

    public int getEan() {
        return ean;
    }

    public void setEan(int ean) {
        this.ean = ean;
    }

    public String getData() {
        return data;
    }

    public void setData(String data) {
        this.data = data;
    }

    @Override
    public String toString() {
        return String.format("{timestamp:%s,feature:%s,ean:%s,data:%s}", timestamp, feature, ean, data);
    }
}

Jackson을 사용하여 Java 객체를 JSON으로 변환하는 방법을 찾을 수 없습니다.

public static void main(String[] args) {
   // CONVERT THE JAVA OBJECT TO JSON HERE
    System.out.println(json);
}

질문입니다. 제 강의가 올바른가요?어떤 인스턴스를 호출해야 하며 어떻게 하면 이 JSON 출력을 얻을 수 있습니까?

변환하려면objectJSON에서 잭슨과 함께:

import com.fasterxml.jackson.databind.ObjectMapper; 
import com.fasterxml.jackson.databind.ObjectWriter; 

ObjectWriter ow = new ObjectMapper().writer().withDefaultPrettyPrinter();
String json = ow.writeValueAsString(object);

오래된 것(Java를 처음 접하는 것)은 알고 있습니다만, 같은 문제가 발생했습니다.그리고 그 해답은 신입처럼 명확하지 않았다.그래서 배운 걸 덧붙여야겠다고 생각했어요.

서드파티 라이브러리를 사용하여 다음과 같은 작업을 지원했습니다.org.codehaus.jackson모든 다운로드 파일은 여기에서 확인할 수 있습니다.

기본 JSON 기능을 사용하려면 프로젝트 라이브러리에 jackson-mapper-asljackson-core-asl의 jars를 추가해야 합니다.

프로젝트에 필요한 버전을 선택하십시오.(일반적으로 최신의 안정된 빌드를 사용할 수 있습니다).

프로젝트 라이브러리로 가져오면 다음을 추가합니다.import코드에 맞게 행:

 import org.codehaus.jackson.JsonGenerationException;
 import org.codehaus.jackson.map.JsonMappingException;
 import com.fasterxml.jackson.databind.ObjectMapper;

JSON으로 변환하여 RESTful 웹 서비스의 일부로 반환하는 Java 객체의 정의 및 할당된 값

User u = new User();
u.firstName = "Sample";
u.lastName = "User";
u.email = "sampleU@example.com";

ObjectMapper mapper = new ObjectMapper();
    
try {
    // convert user object to json string and return it 
    return mapper.writeValueAsString(u);
}
catch (JsonGenerationException | JsonMappingException  e) {
    // catch various errors
    e.printStackTrace();
}

결과는 다음과 같습니다.{"firstName":"Sample","lastName":"User","email":"sampleU@example.com"}

다음의 몇개의 순서에 따릅니다.

  • Jackson의 경우 다음과 같이 동작해야 합니다.

          ObjectMapper mapper = new ObjectMapper();  
          return mapper.writeValueAsString(object);
          //will return json in string
    
  • gson의 경우 다음과 같이 동작합니다.

        Gson gson = new Gson();
        return Response.ok(gson.toJson(yourClass)).build();
    

이것은 도움이 될 수 있습니다.

objectMapper.writeValue(new File("c:\\employee.json"), employee);

// display to console
Object json = objectMapper.readValue(
     objectMapper.writeValueAsString(employee), Object.class);

System.out.println(objectMapper.writerWithDefaultPrettyPrinter()
     .writeValueAsString(json));

다음과 같이 할 수 있습니다.

String json = new ObjectMapper().writeValueAsString(yourObjectHere);

Google Gson을 이렇게 사용할 수 있습니다.

UserEntity user = new UserEntity();
user.setUserName("UserName");
user.setUserAge(18);

Gson gson = new Gson();
String jsonStr = gson.toJson(user);

인정된 답변도 작전본부가 요구한 것을 정확하게 출력하지는 못합니다.JSON 문자열을 출력하지만"문자가 이스케이프되었습니다.그래서 조금 늦을 수도 있지만, 나는 그것이 사람들에게 도움이 되기를 바라며 대답한다!방법은 다음과 같습니다.

StringWriter writer = new StringWriter();
JsonGenerator jgen = new JsonFactory().createGenerator(writer);
jgen.setCodec(new ObjectMapper());
jgen.writeObject(object);
jgen.close();
System.out.println(writer.toString());

주의: 가장 많은 투표를 받은 솔루션을 작동시키려면 POJO의 속성이 다음과 같아야 합니다.public대중을 위해getter/setter:

기본적으로는 잭슨2는 퍼블릭 또는 퍼블릭게터 메서드가 있는 필드만 사용합니다.모든 필드가 private 또는 package private인 엔티티의 시리얼화는 실패합니다.

아직 테스트되지 않았지만, 이 규칙은 구글 Gson과 같은 다른 JSON lib에도 적용될 것이라고 생각합니다.

public class JSONConvector {

    public static String toJSON(Object object) throws JSONException, IllegalAccessException {
        String str = "";
        Class c = object.getClass();
        JSONObject jsonObject = new JSONObject();
        for (Field field : c.getDeclaredFields()) {
            field.setAccessible(true);
            String name = field.getName();
            String value = String.valueOf(field.get(object));
            jsonObject.put(name, value);
        }
        System.out.println(jsonObject.toString());
        return jsonObject.toString();
    }


    public static String toJSON(List list ) throws JSONException, IllegalAccessException {
        JSONArray jsonArray = new JSONArray();
        for (Object i : list) {
            String jstr = toJSON(i);
            JSONObject jsonObject = new JSONObject(jstr);
            jsonArray.put(jsonArray);
        }
        return jsonArray.toString();
    }
}

언급URL : https://stackoverflow.com/questions/15786129/converting-java-objects-to-json-with-jackson

반응형