Как я представляю данные в формате JSON через веб-сервис с помощью Java?

Вот как я это решил:

var oJSON = {};
var aData = [];
var oTable = this.getView().byId("TreeTable");
var aIndicies = oTable.getSelectedIndices();
var oSelect = this.getView().byId("selectStandort").getSelectedKey();
for (var i=0; i<aIndicies.length; i++) {
    var oTableContext   = oTable.getContextByIndex(aIndicies[i]);
    var rowData         = oTable.getModel("jobs").getProperty(oTableContext.getPath());
    aData.push(rowData);
}

oJSON.jobs = aData;
oJSON.standort = oSelect;
22
задан Adrian Anttila 11 September 2008 в 21:19
поделиться

8 ответов

Мне, лучший Java <-> синтаксический анализатор JSON является XStream (да, я действительно говорю о json, не о xml). XStream уже имеет дело с круговыми зависимостями и имеет простой и мощный API, где Вы могли записать Вашему драйверы, преобразователи и так далее.

Наилучшие пожелания

5
ответ дан 29 November 2019 в 04:40
поделиться

Это могло бы стоить изучить Джерси . Джерси облегчает представлять успокоительные веб-сервисы как xml и/или JSON.

пример... запускается с простого класса

@XmlType(name = "", propOrder = { "id", "text" })
@XmlRootElement(name = "blah")
public class Blah implements Serializable {
    private Integer id;
    private String text;

    public Blah(Integer id, String text) {
        this.id = id;
        this.text = text;
    }    

    @XmlElement
    public Integer getId() { return id; }
    public void setId(Integer id) { this.id = id; }

    @XmlElement
    public String getText() { return text; }
    public void setText(String value) { this.text = value; }
}

, Тогда создают Ресурс

@Path("/blah")
public class BlahResource {
    private Set<Blah> blahs = new HashSet<Blah>();

    @Context
    private UriInfo context;

    public BlahResource() {
        blahs.add(new Blah(1, "blah the first"));
        blahs.add(new Blah(2, "blah the second"));
    }

    @GET
    @Path("/{id}")
    @ProduceMime({"application/json", "application/xml"})
    public Blah getBlah(@PathParam("id") Integer id) {
        for (Blah blah : blahs) {
            if (blah.getId().equals(id)) {
                return blah;
            }
        }
        throw new NotFoundException("not found");
    }
}

и представляют его. Существует много способов сделать это, такой как при помощи ServletContainer Джерси. (web.xml)

<servlet>
    <servlet-name>jersey</servlet-name>
    <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
    <servlet-name>jersey</servlet-name>
    <url-pattern>/*</url-pattern>
</servlet-mapping>

Thats все, необходимо сделать... поп, открывает браузер и обзор к http://localhost/blah/1 . По умолчанию Вы будете видеть вывод XML. Если Вы используете FireFox, устанавливаете TamperData и изменяете Ваш accept заголовок к application/json для наблюдения вывода JSON.

, Очевидно, существует намного больше к нему, но Джерси делает все это довольно легким.

Удачи!

18
ответ дан 29 November 2019 в 04:40
поделиться

Мы использовали Flexjson для преобразования объектов Java к JSON и нашли его очень простым в использовании. http://flexjson.sourceforge.net

Вот некоторые примеры:

public String searchCars() {
  List<Car> cars = carsService.getCars(manufacturerId);
  return new JSONSerializer().serialize(cars);
}

Это имеет некоторые замечательные функции, такие как deepSerialize для отправки всего графика, и это не порывает с bi направленными отношениями.

new JSONSerializer().deepSerialize(user); 

даты Форматирования на стороне сервера часто удобно также

new JSONSerializer().transform(
  new DateTransformer("dd/MM/yyyy"),"startDate","endDate"
).serialize(contract);
7
ответ дан 29 November 2019 в 04:40
поделиться

http://www.json.org/java/index.html имеет то, в чем Вы нуждаетесь.

3
ответ дан 29 November 2019 в 04:40
поделиться

Да! Выезд json-lib

Вот упрощенный фрагмент кода от моего собственного кода , которые отправляют ряд моих объектов области:

private String getJsonDocumenent(Object myObj) (
    String result = "oops";
    try {
        JSONArray jsonArray = JSONArray.fromObject(myObj);

        result = jsonArray.toString(2);  //indent = 2

    } catch (net.sf.json.JSONException je) {

        throw je;
    }
    return result;
}
3
ответ дан 29 November 2019 в 04:40
поделиться

Для УСПОКОИТЕЛЬНЫХ веб-сервисов в Java также проверьте Restlet API, который обеспечивает очень мощную и гибкую абстракцию для веб-сервисов REST (и сервер и клиент, в контейнере или автономный), и также интегрируется приятно с Spring и JSON.

1
ответ дан 29 November 2019 в 04:40
поделиться

As already mentioned, Jersey (JAX-RS impl) is the framework to use; but for basic mapping of Java objects to/from JSON, Tutorial is good. Unlike many alternatives, it does not use strange XML-compatibility conventions but reads and writes clean JSON that directly maps to and from objects. It also has no problems with null (there is difference between missing entry and one having null), empty Lists or Strings (both are distinct from nulls).

Jackson works nicely with Jersey as well, either using JAX-RS provider jar, or even just manually. Similarly it's trivially easy to use with plain old servlets; just get input/output stream, call ObjectMapper.readValue() and .writeValue(), and that's about it.

1
ответ дан 29 November 2019 в 04:40
поделиться

Я нашел google-gson убедительным. Конвертируется в JSON и обратно. http://code.google.com/p/google-gson/ Он очень гибкий и может легко справляться со сложностями с объектами. Мне нравится его поддержка дженериков.

/*
* we're looking for results in the form
* {"id":123,"name":thename},{"id":456,"name":theOtherName},...
*
* TypeToken is Gson--allows us to tell Gson the data we're dealing with
* for easier serialization.
*/
Type mapType = new TypeToken<List<Map<String, String>>>(){}.getType();

List<Map<String, String>> resultList = new LinkedList<Map<String, String>>();

for (Map.Entry<String, String> pair : sortedMap.entrySet()) {
    Map<String, String> idNameMap = new HashMap<String, String>();
    idNameMap.put("id", pair.getKey());
    idNameMap.put("name", pair.getValue());
    resultList.add(idNameMap);
}

return (new Gson()).toJson(resultList, mapType);
3
ответ дан 29 November 2019 в 04:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: