Json - объект Java для Json

Я очень новичок в Json, и моя цель - создать вывод Json ниже из Java bean. Как мне структурировать мой Java-объект? Должен ли я иметь класс MyResult и User and Result в качестве подклассов? Какую библиотеку Json я могу использовать для этого?

“MyResult” {
    “AccountID”: “12345”,
    "User" {
        "Name": "blah blah",
        "Email": “[email protected]”,
     },
     "Result" {
         "Course": “blah”,
         "Score": “10.0”
     }
 }
 user23802112 июн. 2012 г., 19:53
Спасибо за ответ. Если бы я спроектировал это в Джексоне, как должен выглядеть мой Java-объект?

Ответы на вопрос(6)

GSON

Супер просто (нет получателей / поселений, не нужны аннотации или конфигурации).

class BagOfPrimitives {
  private int value1 = 1;
  private String value2 = "abc";
  private transient int value3 = 3;
}

BagOfPrimitives obj = new BagOfPrimitives();
Gson gson = new Gson();
String json = gson.toJson(obj); 

==> json is {"value1":1,"value2":"abc"}
 19 нояб. 2013 г., 21:28
Теперь я вижу, @fvu сказал примерно то же самое. тем не мение.

этот ТАК пост может помочь вам понять разницу между Джексоном и GSON. Какой из них является «лучшим» зависит от того, что важно для вас.

РЕДАКТИРОВАТЬ: специально для Джексона, ваш пример очень похож на пример, который они дают для того, что они называют Full Data Binding, вы можете прочитать егоВот, Кстати, хотя объявленные 5 минут, необходимые для чтения этого документа, могут быть немного короткими, в нем дается полный обзор различных способов использования Джексона. Вы также заметите, что приведенные примеры не используют аннотации.

Googles GSON действительно хороший JSON Lib.это взято из предыдущей ссылки и в основном описывает некоторые его функции.

What Json library can I use for this? Библиотека Джексона используется для сериализации объектов Java в JSON и десериализации строки JSON в объекты Java. Добавьте следующие зависимости в pom.xml.

   <dependency>
     <groupId>com.fasterxml.jackson.core</groupId,>
     <artifactId>jackson-databind</artifactId>
     <version>2.9.4</version> 
     </dependency>

Эта зависимость транзитивно добавит следующие библиотеки в путь к классам: ДЖЕКСОН-аннотаций-2.9.4.jar ДЖЕКСОН-ядро-2.9.4.jar ДЖЕКСОН-DataBind-2.9.4.jar

** Примечание: пожалуйста, всегда используйте последние банки.

How should I structure my Java object? Пожалуйста, смотрите полный рабочий код.

  **MainClass.java:**

      import java.io.IOException;

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

    public class MainClass {

    public static void main(String[] args) throws IOException {

    ObjectMapper mapper = new ObjectMapper();
    mapper.enable(SerializationFeature.INDENT_OUTPUT);

    Result result = new Result();
    result.setCourse("blah");
    result.setScore("10.0");

    User user = new User();
    user.setName("blah blah");
    user.setEmail("[email protected]");

    MyResult myResult = new MyResult();
    myResult.setAccountID("12345");
    myResult.setResult(result);
    myResult.setUser(user);

    MyPojo myPojo = new MyPojo();
    myPojo.setMyResult(myResult);

    String jsonStr = mapper.writeValueAsString(myPojo);

    System.out.println(jsonStr);

} }

     **MyPojo.java:-**


    import com.fasterxml.jackson.annotation.JsonProperty;
    import com.fasterxml.jackson.annotation.JsonPropertyOrder;

@JsonPropertyOrder({ "AccountID", "User", "Result" })
public class MyPojo {
private MyResult MyResult;

public MyResult getMyResult() {
    return MyResult;
}

@JsonProperty("MyResult")
public void setMyResult(MyResult MyResult) {
    this.MyResult = MyResult;
} }


    **MyResult.java:**

import com.fasterxml.jackson.annotation.JsonProperty;
import com.fast,erxml.jackson.annotation.JsonPropertyOrder;

@JsonPropertyOrder({ "AccountID", "User", "Result" })
public class MyResult {

private User User;

private Result Result;

private String AccountID;

public User getUser() {
    return User;
}

@JsonProperty("User")
public void setUser(User User) {
    this.User = User;
}

public Result getResult() {
    return Result;
}

@JsonProperty("Result")
public void setResult(Result Result) {
    this.Result = Result;
}

public String getAccountID() {
    return AccountID;
}

  @JsonProperty("AccountID")
  public void setAccountID(String AccountID) {
    this.AccountID = AccountID;
    } }


    **Result.java:**

 import com.fasterxml.jackson.annotation.JsonProperty;
 import com.fasterxml.jackson.annotation.JsonPropertyOrder;

   @JsonPropertyOrder({ "Course", "Score" })
    public class Result {

    private String Course;

    private String Score;

    public String getCourse() {
    return Course;
    }

    @JsonProperty("Course")
    public void setCourse(String Course) {
    this.Course = Course;
}

   public String getScore() {
    return Score;
}

   @JsonProperty("Score")
  public void setScore(String Score) {
    this.Score = Score;
  } }


    **User.java:**

    import com.fasterxml.jackson.annotation.JsonProperty;
    import com.fasterxml.jackson.annotation.JsonPropertyOrder;

    @JsonPropertyOrder({ "Name", "Email" })
      public class User {

    private String Name;

    private String Email;

    public String getName() {
    return Name;
    }

@JsonProperty("Name")
public void setName(String Name) {
    this.Name = Name;
}

public String getEmail() {
    return Email;
}

@JsonProperty("Email")
public void setEmail(String Email) {
    this.Email = Email;
}

@Override
public String toString() {
    return "ClassPojo [Name = " + Name + ", Email = " + Email + "]";
} }

   **Result:**

      {
  "MyResult" : {
    "AccountID" : "12345",
   "User" : {
     "Name" : "blah blah",
     "Email" : "[email protected]"
   },
   "Result" : {
     "Course" : "blah",
     "Score" : "10.0"
   }
  }
}

Примечание. Обратите внимание на использование аннотаций Json, таких как @JsonProperty (& quot; Электронная почта), чтобы сделать имена свойств json такими же, как в ожидаемом выводе & amp; @JsonPropertyOrder ({& quot; Имя & quot ;, & quot; Электронная почта & quot;}, чтобы поддерживать последовательность, как в ожидаемом выводе.https://www.baeldung.com/jackson-annotations.

джексон также довольно быстрый и простой в использовании

 user23802112 июн. 2012 г., 21:52
Спасибо за ответ. Если бы я спроектировал это в Джексоне, как должен выглядеть мой Java-объект?
Решение Вопроса

Note:  ЯEclipseLink JAXB (MOXy) привести и членJAXB (JSR-222) экспертная группа.

How should I structure my Java object?

Ниже показано, как может выглядеть ваша объектная модель. JSON-привязка MOXy использует аннотации JAXB для отображения модели предметной области на JSON, поэтому я включил и их. Реализации JAXB имеют правила по умолчанию для сопоставления имен полей / свойств, но поскольку ваш документ отличается от значения по умолчанию, каждое поле необходимо аннотировать.

MyResult

package forum11001458;

import javax.xml.bind.annotation.*;

@XmlRootElement(name="MyResult")
public class MyResult {

    @XmlElement(name="AccountID")
    private String accountID;

    @XmlElement(name="User")
    private User user;

    @XmlElement(name="Result")
    private Result result;

}

User

package forum11001458;

import javax.xml.bind.annotation.XmlElement;

public class User {

    @XmlElement(name="Name")
    private String name;

    @XmlElement(name="Email")
    private String email;

}

Result

package forum11001458;

import javax.xml.bind.annotation.XmlElement;

public class Result {

    @XmlElement(name="Course")
    private String course;

    @XmlElement(name="Score")
    private String score;

}

What Json library can I use for this?

Ниже описано, как вы можете использовать MOXy для привязки JSON:

jaxb.properties

Чтобы использовать MOXy в качестве вашего JAXB-провайдера, вам нужно включить файл с именемjaxb.properties со следующей записью в том же пакете, что и модель вашего домена:

javax.xml.bind.context.factory=org.eclipse.persistence.jaxb.JAXBContextFactory

Demo

Обратите внимание, что связывание JSON MOXy не требует каких-либо зависимостей времени компиляции. Все необходимые API доступны в Java SE 6. Вы можете добавить необходимые вспомогательные API, если вы используете Java SE 5.

package forum11001458;

import java.io.File;
import javax.xml.bind.*;

public class Demo {

    public static void main(String[] args) throws Exception {
        JAXBContext jc = JAXBContext.newInstance(MyResult.class);

        Unmarshaller unmarshaller = jc.createUnmarshaller();
        unmarshaller.setProperty("eclipselink.media-type", "application/json");
        File json = new File("src/forum11001458/input.json");
        Object myResult = unmarshaller.unmarshal(json);

        Marshaller marshaller = jc.createMarshaller();
        marshaller.setProperty("eclipselink.media-type", "application/json");
        marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
        marshaller.marshal(myResult, System.out);
    }

}

input.json/Output

{
   "MyResult" : {
      "AccountID" : "12345",
      "User" : {
         "Name" : "blah blah",
         "Email" : "[email protected]"
      },
      "Result" : {
         "Course" : "blah",
         "Score" : "10.0"
      }
   }
}

Ваш ответ на вопрос