Jackson으로 Java 객체를 JSON으로 변환


166

내 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 출력을 얻을 수 있습니까?


4
다음 튜토리얼이 도움이 될 것입니다 : mkyong.com/java/how-to-convert-java-object-to-from-json-jackson
maple_shaft

감사합니다 :)
JustTheAverageGirl

엔티티가 다른 테이블에 합류 경우,이 방법 .. 따라 /programming/19928151/convert-entity-object-to-json/45695714#45695714
Sedat Y

답변:


417

objectJackson에서 JSON으로 변환하려면 다음을 수행하십시오 .

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

9
ObjectWriter에서 String이 빠져 나옵니다. RESTful과 같은 웹 서비스를 통해 전송되는 경우 new JSONObject (ow.writeValueAsString (msg))를 사용하십시오.
jmarcosSF

관심이없는 이유는 os.writeValueAsJSONString (object)이 아닌 이유는 무엇입니까?
DevilCode

3
이 오류에 직면하고 있습니다. 코드로 해결하는 방법 클래스 com.liveprocessor.LPClient.LPTransaction에 대해 serializer를 찾을 수 없으며 BeanSerializer를 생성하는 속성이 발견되지 않았습니다 (예외를 피하기 위해 SerializationFeature.FAIL_ON_EMPTY_BEANS 사용 안함)

11
그런데 라이브러리 : import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.ObjectWriter;
diego matos-keke

object모든 필드에 대해 getter가 있어야합니다.
Drakonoved

25

나는 이것이 오래되었다는 것을 알고 있으며 (Java에 익숙하지 않다) 같은 문제가 발생했다. 그리고 그 답은 초보자만큼 나에게 명확하지 않았습니다. 그래서 나는 내가 배운 것을 더할 것이라고 생각했습니다.

노력을 돕기 위해 타사 라이브러리를 사용했습니다. 이에 대한 org.codehaus.jackson 모든 다운로드는 여기 에서 찾을 수 있습니다 .

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

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

프로젝트 라이브러리로 가져 오면 import코드에 다음 줄을 추가하십시오 .

 import org.codehaus.jackson.JsonGenerationException;
 import org.codehaus.jackson.map.JsonMappingException;
 import org.codehaus.jackson.map.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"}


'import'행이 "import com.fasterxml.jackson.databind.ObjectMapper;"로 변경되었다고 생각합니다.
barrypicker

16

이것은 유용 할 수 있습니다 :

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

10

그냥 이렇게

 for jackson it's
         ObjectMapper mapper = new ObjectMapper();  
         return mapper.writeValueAsString(object);
         //will return json in string


 for gson it's:
            Gson gson = new Gson();
            return Response.ok(gson.toJson(yourClass)).build();

Response.ok은 (는) 무엇 이죠?
Codeversed

mongoDB에 삽입 된 JSON 크기가 허용 된 한계를 초과하는 데 문제가있었습니다 .Gson 객체를 켤 때 Jackson보다 크기가 큽니다. 그냥 팁.
Daniela Morais 2016 년

14
의문의 여지가 jackson없습니다Gson
Ean V

2
@Codeversed Response는 Jersey 라이브러리의 클래스입니다. Response.ok는 상태 코드 200으로 JSON 응답을 반환합니다.
Pranav


2

심지어 받아 들여진 대답조차도 op가 요구 한 것을 정확하게 출력 하지는 않습니다 . 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());

2

참고 : 가장 많이 투표 된 솔루션을 작동 시키려면 POJO의 속성 public이 public getter/ setter: 이어야합니다 .

기본적으로 Jackson 2는 공개 필드이거나 공개 getter 메소드가있는 필드에서만 작동합니다. 모든 필드가 private 또는 package private 인 엔티티를 직렬화하면 실패합니다.

아직 테스트되지는 않았지만이 규칙은 Google Gson과 같은 다른 JSON 라이브러리에도 적용됩니다.


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

너무 많은 일, 너무 많은 반사! 매퍼는 이러한 상용구 작업을하지 않아도됩니다!
Ean V

3
나는 Convectors를 좋아합니다!
Christos

0

이런 식으로 Google Gson을 사용할 수 있습니다

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

Gson gson = new Gson();
String jsonStr = gson.toJson(user);
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.