Сопоставление строки JSON с объектом

У меня есть ответ JSON, и мне нужно сопоставить соответствующую строку JSON с конкретным классом ответа. Существуют ли какие-либо инструменты или инфраструктура, чтобы сделать то же самое.

Класс ответа:

import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement(name = "0")
@XmlAccessorType(XmlAccessType.FIELD)
public class Student {

     @XmlElement(name="0")
     private String firstName;
     @XmlElement(name="1")
     private String lastName;

     public String getFirstName() {
         return firstName;
     }
     public void setFirstName(String firstName) {
         this.firstName = firstName;
     }
     public String getLastName() {
         return lastName;
     }
     public void setLastName(String lastName) {
         this.lastName = lastName;
     }
}

Строка ответа Json: {"0":{"0":"Рокки","1":"Джон"}}

Я использую Apache CXF Framework с Jettison, поскольку поставщик JSON также использует JAXB для передачи данных клиентам с низкой пропускной способностью.

Обратите внимание, что я хочу преобразовать числовые представления в соответствующие поля.


person Prabhath kesav    schedule 30.10.2012    source источник


Ответы (3)


Примечание. Я EclipseLink JAXB (MOXy) руководитель и член JAXB (JSR-222) группа экспертов.

Ниже показано, как вы поддерживаете свой вариант использования с помощью класса Student, аннотированного с помощью EclipseLink JAXB (MOXy).

Демо

import java.io.StringReader;
import java.util.*;
import javax.xml.bind.*;

public class Demo {

    public static void main(String[] args) throws Exception {
        Map<String, Object> properties = new HashMap<String, Object>(1);
        properties.put("eclipselink.media-type", "application/json");
        JAXBContext jc = JAXBContext.newInstance(new Class[] {Student.class}, properties);

        Unmarshaller unmarshaller = jc.createUnmarshaller();
        StringReader json = new StringReader("{\"0\":{\"0\":\"Rockey\",\"1\":\"John\"}}");
        Student student = (Student) unmarshaller.unmarshal(json);

        Marshaller marshaller = jc.createMarshaller();
        marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
        marshaller.marshal(student, System.out);
    }

}

Вывод

{
   "0" : {
      "0" : "Rockey",
      "1" : "John"
   }
}

jaxb.properties

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

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

MOXy и JAX-RS

Для приложений JAX-RS вы можете использовать класс MOXyJsonProvider для включения привязки JSON (см.: http://blog.bdoughan.com/2011/05/specifying-eclipselink-moxy-as-your.html).

person bdoughan    schedule 30.10.2012
comment
Но ни один из методов не возвращает строку json после преобразования. Как получить строку json с помощью jaxB - person Manjunath M; 28.02.2018

Вы можете сослаться на библиотеку Google-GSON — https://github.com/google/gson

Вы также можете сослаться на более ранний ответ stackoverflow - Преобразовать строку JSON в объект в Java Я?

person Yashpal Singla    schedule 30.10.2012