잭슨을 사용하여 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-asl 및 jackson-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 stringgson의 경우 다음과 같이 동작합니다.
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
'programing' 카테고리의 다른 글
| Cypress에서 Vuex getter에 액세스하는 올바른 방법은 무엇입니까? (0) | 2022.07.30 |
|---|---|
| v-for 값을 v-if에 바인딩하는 방법 (0) | 2022.07.30 |
| Vue.js에서 어레이를 필터링하고 V-for를 루프하는 방법 (0) | 2022.07.30 |
| 반복된 typedefs - C에서는 유효하지 않지만 C++에서는 유효합니다. (0) | 2022.07.30 |
| vdso와 vsyscall이 뭐죠? (0) | 2022.07.30 |