Json Сериализация Java, которая работает с GWT

Я ищу простой Json (de) сериализатор для Java, который может работать с GWT. Я немного искал Google и нашел некоторые решения, которые либо требуют аннотировать каждого участника, либо определять бесполезные интерфейсы. Довольно скучно. Почему бы нам не сделать что-то очень простое, как

class MyBean { ... } new GoodSerializer().makeString(new MyBean()); new GoodSerializer().makeObject("{ ... }", MyBean.class) 

Взгляните на типы Overlay GWT. Я думаю, что это самый простой способ работать с JSON в GWT. Вот пример модифицированного кода из связанной статьи:

 public class Customer extends JavaScriptObject { public final native String getFirstName() /*-{ return this.first_name; }-*/; public final native void setFirstName(String value) /*-{ this.first_name = value; }-*/; public final native String getLastName() /*-{ return this.last_name; }-*/; public final native void setLastName(String value) /*-{ this.last_name = value; }-*/; } 

После определения типа наложения легко создать объект JavaScript из JSON и получить доступ к его свойствам в Java:

 public static final native Customer buildCustomer(String json) /*-{ return eval('(' + json + ')'); }-*/; 

Если вы хотите повторное представление объекта JSON, вы можете обернуть тип наложения в JSONObject:

 Customer customer = buildCustomer("{'Bart', 'Simpson'}"); customer.setFirstName("Lisa"); // Displays {"first_name":"Lisa","last_name":"Simpson"} Window.alert(new JSONObject(customer).toString()); 

Еще одна вещь, которую нужно попробовать – это новая платформа AutoBean, представленная с GWT 2.1.

Вы определяете интерфейсы для своих компонентов и фабрику, которая их расшифровывает, а GWT генерирует для вас реализации.

 interface MyBean { String getFoo(); void setFoo(String foo); } interface MyBiggerBean { List getBeans(); void setBeans(List beans>; } interface Beanery extends AutoBeanFactory{ AutoBean makeBean(); AutoBean makeBigBean(); } Beanery beanFactory = GWT.create(Beanery.class); void go() { MyBean bean = beanFactory.makeBean().as(); bean.setFoo("Hello, beans"); } 

AutoBeanCodex может использоваться для сериализации их в и из json.

 AutoBean autoBean = AutoBeanUtils.getAutoBean(bean); String asJson = AutoBeanCodex.encode(autoBean).getPayload(); AutoBean autoBeanCloneAB = AutoBeanCodex.decode(beanFactory, MyBean.class, asJson ); MyBean autoBeanClone = autoBeanCloneAB.as(); assertTrue(AutoBeanUtils.deepEquals(autoBean, autoBeanClone)); 

Они также работают на стороне сервера – используйте AutoBeanFactoryMagic.create(Beanery.class) вместо GWT.create(Beanery.class) .

Самый простой способ – использовать встроенный JSON API GWT. Вот документация . И вот отличный учебник о том, как его использовать.

Это так просто:

 String json = //json string JSONValue value = JSONParser.parse(json); 

API JSONValue довольно крут. Он позволяет вам проверять цепочку при извлечении значений из объекта JSON, чтобы исключение было выбрано, если что-то не соответствует формату.

Кажется, я нашел правильный ответ на мой вопрос

Я понял, что bean to json и json to bean conversion в GWT – это не тривиальная задача. Известные библиотеки не будут работать, потому что GWT потребует их полного исходного кода, и этот исходный код должен использовать только classы Java, которые подражают GWT. Кроме того, вы не можете использовать reflection в GWT. Очень жесткие требования!

Я нашел единственное существующее решение с именем gwt-jsonizer . Он использует собственный class Generator и требует спутникового интерфейса для каждого «jsonable» bean-компонента. К сожалению, он не работает без исправления последней версии GWT и не обновляется в течение длительного времени.

Итак, я лично решил, что дешевле и быстрее сделать мои бобы как-то, как превратиться в json. Как это:

 public class SmartBean { private String name; public String getName() { return name; } public void setName(String value) { name = value; } public JSONObject toJson() { JSONObject result = new JSONObject(); result.put("name", new JSONString(this.name)); return result; } public void fromJson(JSONObject value) { this.name = value.get("name").isString().stringValue(); } } 

JSONxxxx – это встроенные classы GWT, которые поддерживают низкоуровневую поддержку json.

RestyGWT – мощная библиотека для кодирования или декодирования Java Object для JSON в GWT:

 import javax.ws.rs.POST; ... public interface PizzaOrderCodec extends JsonEncoderDecoder { } 

Затем:

 // GWT will implement the interface for you PizzaOrderCodec codec = GWT.create(PizzaOrderCodec.class); // Encoding an object to json PizzaOrder order = ... JSONValue json = codec.encode(order); // decoding an object to from json PizzaOrder other = codec.decode(json); 

Он также имеет несколько простых в использовании API для использования Restful web-сервисов.

Приятного времени.

Проверь это:

GWT Professional JSON Serializer: http://code.google.com/p/gwtprojsonserializer/

Работает с GWT 2.0+!

json.org/java, кажется, входит в GWT в эти дни:

GWT-сервлет-deps.jar \ орг \ JSON \

Или этот проект представляется исчерпывающим: http://code.google.com/p/piriti/

В приложениях Google Web Toolkit, с 510 по 522, автор, Райан Дьюсбери, показывает, как использовать генерацию кода GWT для сериализации в документы XML и JSON и из них.

Вы можете скачать код здесь ; вам нужны комплекты кода главы 10, а затем вы хотите посмотреть в пакете src / com / gwtapps / serialization. Я не видел лицензии на этот код, но отправил его по электронной почте, чтобы узнать, что он говорит. Я обновлю это, если он ответит.

Проблемы с этим решением:

  • Вам нужно добавить интерфейс маркера на все ваши объекты, которые вы хотите сериализовать (он использует java.io.Serializable, но я полагаю, вы могли бы использовать другие – если вы используете hibernate для вашего бэкэнд, ваши pojos могут уже быть помечены как это) ,
  • Код поддерживает только свойства строки; он может быть расширен.
  • Код написан только для 1.4 и 1.5.

Таким образом, это не решение из коробки, но отличная отправная точка для компилятора JSON, который подходит для GWT. Объедините это с JSON-сериализатором на стороне сервера, например json-lib, и вам хорошо идти.

Я также нашел этот проект (опять-таки, требуется какой-то интерфейс маркера).

Попробуйте этот сериализатор из Google Code: http://code.google.com/p/json-io/

Если вам нужно написать или прочитать JSON-формат в Java, это инструмент для использования. Нет необходимости создавать дополнительные classы и т. Д. Преобразуйте граф объекта Java в формат JSON за один вызов. Сделайте обратное – создайте объекты JSON String или Stream для Java. Это самая быстрая библиотека, которую я видел еще для этого. В большинстве случаев он быстрее ObjectOutputStream и ObjectInputStream, которые используют двоичный формат.

Очень удобная утилита.

Кажется, я очень много отвечаю на этот вопрос …

На странице code.google.com есть страница « Использование GWT для Mashups JSON» . Это (к сожалению) на моей голове, так как я не знаком с GWT, так что это может быть не полезно.

Вы можете проверить этот проект https://gerrit.googlesource.com/gwtjsonrpc/

Это библиотека, созданная для поддержки системы проверки кода для Android, Gerrit, но это автономный модуль, предназначенный для встраивания в любой проект GWT, а не только с Gerrit.

Разумное руководство – это, вероятно, README на верхнем уровне каталога. Он очень похож на стандартный GWT RPC, но использует JSON-кодирование. Он также имеет встроенную защиту XSRF.

Хорошо, я удалил свой предыдущий ответ, потому что он оказался именно тем, чего вы не хотели.

Я не знаю, насколько хорошо он работает с GWT, но мы используем библиотеку json-lib для сериализации объектов в обычном Java-проекте, где я работаю.

Он может создать JSONObject непосредственно из JavaBean , а затем использовать полученный метод JSONObject toString (), чтобы вернуть фактическую строку JSON.

Аналогично, он также может превратить JSON в JavaBean .

Не уверен, что jackson будет работать на вас. Я не знаю, есть ли GWT-специфический, который вы ищете; если нет, то это должно сработать.

Но его сериализация / десериализация работает достаточно хорошо, как:

 // read json, create object ObjectMapper mapper = new ObjectMapper(); MyBean bean = mapper.readValue(jsonAsString, MyBean.class); // and write out StringWriter sw = new StringWriter(); mapper.writeValue(sw, user); String jsonOut = sw.toString(); 

Вам нужны аксессоры ( getX() для сериализации, setX() для десериализации, могут аннотировать методы с другими именами), но это все.

  • Заставить JSON.NET включать миллисекунды при сериализации DateTime (даже если компонент ms равен нулю)
  • Использование JsonConvert.DeserializeObject для десериализации Json в class C # POCO
  • Почему, когда конструктор аннотируется с помощью @JsonCreator, его аргументы должны быть аннотированы с помощью @JsonProperty?
  • Сериализация jacksonа JSON, предотrotation рекурсии путем определения уровня
  • ShouldSerialize * () vs * Условный шаблон условной сериализации
  • Добавление к ObjectOutputStream
  • Deserialize JSON в динамический объект C #?
  • Сериализация JSON массива с полиморфными объектами
  • JSON.Net Обнаружен собственный цикл привязки
  • Как сериализовать словарь как часть его родительского объекта с помощью Json.Net
  • Сохранение / загрузка данных в Unity
  • Давайте будем гением компьютера.