Опитвам се да напиша проста функция, която преобразува Json низове в обекти.
Езикът, който използвам, е обективен, но този въпрос обсъжда проблеми, които не са свързани с този език.
Въпросът ми е, как да разбера типа на обектите, които са положени в json масив, който трябва да бъде картографиран в непараметризирани (известни още като негенерични) списъци??
Намерих две библиотеки Json Java, които не могат да решат този проблем, Jakson и Gson и ето примера:
import java.io.Serializable;
import java.util.List;
import com.google.gson.Gson;
public class Main
{
public static void main(String[] args) throws Exception
{
Gson g = new Gson();
Office o = g.fromJson(
"{\"empx\":\"1\",\"emps\":[{\"firstName\":\"Muhammad\",\"lastName\":\"Abdullah\"},{\"firstName\":\"XX\",\"lastName\":null}]}"
, Office.class);
System.out.println(((Employee)o.getEmps().get(0)).getFirstName());
}
}
class Office
{
private List emps;
private String empx;
public String getEmpx()
{
return empx;
}
public void setEmpx(String empx)
{
this.empx = empx;
}
public List getEmps()
{
return emps;
}
public void setEmps(List emps)
{
this.emps = emps;
}
}
class Employee implements Serializable
{
private static final long serialVersionUID = 1L;
String firstName;
String lastName;
public String getFirstName()
{
return firstName;
}
public String getLastName()
{
return lastName;
}
public void setFirstName(String firstName)
{
this.firstName = firstName;
}
public void setLastName(String lastName)
{
this.lastName = lastName;
}
}
В Google Gson
те разглеждат обектите на този масив като обекти от тип java.lang.Object
:
Exception in thread "main" java.lang.ClassCastException: java.lang.Object
Но Jaskon беше много по-умен, той смяташе този unknown
обект за карта:
Exception in thread "main" java.lang.ClassCastException: java.util.LinkedHashMap
И двамата обаче не успяха да открият обекта (което според мен е невъзможно!)
И така, в език, който не поддържа параметризирани типове (Generics), няма ли начин да се постигне това?
Employee
обект: няма никаква препратка къмEmployee
! И не е ясно какво всъщност питате тук. - person Daniel Brockman   schedule 27.09.2011