Вопрос по struts2, json, jquery, javascript – Преобразование Java-объекта в JSON?

1

Я использую Struts2 для действий и JQuery для пользовательского интерфейса ...

Я хочу знать, как преобразовать объект карты в объект JSON и отправить его обратно в пользовательский интерфейс,

Теперь я могу напечатать на странице JSP обычный объект Java-карты:

{71=Heart XXX, 76=No Heart YYY}

Но я хочу, чтобы это было так:

{71:Heart XXX, 76:No Heart YYY}

Как я достигну этого ....?

Ваш Ответ

4   ответа
1

ПытатьсяGson:

Gson gson = new Gson();
String json = gson.toJson(yourMap);

Однако я бы не рекомендовал помещать этот тип кода в JSP. Такие вещи должны жить в контроллере, таком как класс Servlet или Action.

Вы также определенно не хотите, чтобы выходные данные были:

{71:Heart XXX, 76:No Heart YYY}

но скорее правильный JSON-подобный (имена в кавычках, строковые значения в кавычках):

{"71":"Heart XXX", "76":"No Heart YYY"}

Gson выведет последнее.

спасибо ... но я уже использовал это и получаю это ... но согласно моему требованию я не должен использовать это, Вы можете предложить любой другой способ Esh
спасибо ... я постараюсь дать вам знать Esh
Если вам не разрешено использовать Gson, взгляните наJackson или дажеjson.org/java (последний действительно упрощен и сложен в использовании IMO). Если вам не разрешено использовать какую-либо библиотеку, вам не удастся получить правильную структуру и экранирование JSON. Не делайте этого, используйте библиотеку.
2

то есть после добавления плагина struts2-json.

Мне нравится, когда это возможно, использовать плагин struts2 -ventionss, поэтому в моем файле struts.xml очень мало и я предпочитаю использовать в основном аннотации.

Чтобы ваше действие возвращало json при использовании условных обозначений, есть два шага: 1) заставить ваше действие использовать пакет json-default, 2) определить действие как имеющее тип результата json.

JSON Annotations Example

package org.test.action;

import com.opensymphony.xwork2.ActionSupport;
import org.apache.struts2.convention.annotation.ParentPackage;
import org.apache.struts2.convention.annotation.Result;
@ParentPackage("json-default")
@Result(type = "json")
public class JsonTest extends ActionSupport{
    private String name = "Hello World";
    private String language = "Java, I mean English";

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getLanguage() {
        return language;
    }

    public void setLanguage(String language) {
        this.language = language;
    }
}

Иногда значения более сложные, чем примитивы, и вам захочется сократить возвращаемый json, или иногда вы захотите поместить несколько действий в один класс (иногда вы возвращаете сложную структуру и, обрезая ее определенными способами, можете выполнять свою работу на клиент проще). Для этого мы используем параметры include или exclude.

Example exclude language

Измените приведенную выше аннотацию результата так:

@Result(type = "json", params = {
    "excludeProperties",
    "language"})

Другим способом достижения вышесказанного является явное указание, какие свойства мы хотим:

@Result(type = "json", params = {
    "includeProperties",
    "name"})

Example Using wild cards with exclude parameter Action code not supplied, good for trimming complicated objects

@Result(type = "json", params = {
    "excludeProperties",
    "punches.*.punchesCollection, *.punchesCollection.*"}) 

Вы можете видеть, что с плагином довольно сложно получить что-либо проще, чем метод xml или аннотации.

1

Есть несколько библиотек JSON для Java наhttp://www.json.org/. I would check out one of those.

Хотя это верный ответ, следует попытаться объяснить, почему можно отказаться от поддержки встроенных стоек 2 json и перейти к более трудоемкому решению более низкого уровня.
6

Я лично пользуюсьstruts2-json плагин для этого. Он очень прост в использовании, и вы можете легко конвертировать Map в Json и наоборот через некоторые записи struts.xml. Создать карту и ее геттер / сеттеры.

private Map<String, String> map= new HashMap<String, String>();

Определите глобальный результат как

 <result-type name="json" class="org.apache.struts2.json.JSONResult" default="false" />

в вашемstruts.xml наряду с добавлением перехватчика в стеке ваших сеансов.

<interceptor name="json" class="org.apache.struts2.json.JSONInterceptor" />

<action name="YouAction" class="YourActionClass" method="executeMethod">
         <result type="json"></result>
</action>

Больше документации можно найти здесь

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