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