Тип объектов внутри непараметрических массивов в JSON - PullRequest
0 голосов
/ 27 сентября 2011

Я пытаюсь написать простую функцию, которая преобразует строки 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), нет ли способа сделать это?

1 Ответ

0 голосов
/ 27 сентября 2011

Я бы предложил использовать словари. Клавиши клавиш могут выводить типы или может быть клавиша типа.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...