Я пытаюсь написать простую функцию, которая преобразует строки Json в объекты.
Язык, который я использую, является target-c, однако в этом вопросе обсуждаются проблемы, не относящиеся к этому языку.
Мой вопрос: как узнать тип объектов, которые лежат внутри массива 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
Но Джаскон был намного умнее, он считал этот unknown
объект картой:
Exception in thread "main" java.lang.ClassCastException: java.util.LinkedHashMap
Однако, обоим не удалось обнаружить Объект (что я считаю невозможным!)
Итак, на языке, который не поддерживает параметризованные типы (Generics), нет ли способа сделать это?