2014-11-29 2 views
0

Я пытаюсь переписать некоторые JavaScript-логические функции JavaScript. Не могли бы вы помочь мне разместить этот массив JavaScript в каком-то Java-совместимом объекте, чтобы я мог перебирать все его элементы?Как преобразовать массив JavaScript в массив Java

Мне нужно это как жесткий набор внутри функции Java.

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

this.contract = [ 
     ["ContractNetworkId",24], 
     ["ContractProvider",8], 
     ["ContractTariff",16], 
     ["ContractSerialNumber",32], 
     ["ContractCustomerInfoBitmap",2,[ 
      ["ContractCustomerProfile",6], 
      ["ContractCustomerNumber",32] 
     ]], 
     ["ContractPassengerInfoBitmap",2, [ 
      ["ContractPassengerClass",8], 
      ["ContractPassengerTotal",8] 
     ]], 
     ["ContractVehicleClassAllowed",6], 
     ["ContractPaymentPointer",32], 
     ["ContractPayMethod",11], 
     ["ContractServices",16], 
     ["ContractPriceAmount",16], 
     ["ContractPriceUnit",16], 
     ["ContractRestrictionBitmap",7,[ 
      ["ContractRestrictStart",11], 
      ["ContractRestrictEnd",11], 
      ["ContractRestrictDay",8], 
      ["ContractRestrictTimeCode",8], 
      ["ContractRestrictCode",8], 
      ["ContractRestrictProduct",16], 
      ["ContractRestrictLocation",16] 
     ]]..... 
+1

Что об определении каждой сложной структуры в яваскрипте массива в объекты Java? Затем добавьте их в список = новый ArrayList () ;. Итерируйте список, проверяя, какой экземпляр объекта представляют собой элементы, а затем обрабатывая их соответствующим образом. – MihaiC

+1

Опция должна была бы использовать здесь библиотеку JSON, а затем сериализовать ее на POJO – fge

+0

. Вам нужно полностью переписать ее в java? – lifus

ответ

1

Создайте новый класс для представления сложных объектов, так как все они имеют label и value. Поскольку одним из их атрибутов может быть list того же объекта, вы можете его добавить.

Что-то вроде:

public class CustomObject{ 
    private String label; 
    private int value; 
    private List<CustomObject> coList; 

    public CustomObject(String label, int value){ 
     this.label=label; 
     this.value=value; 
    } 

    public CustomObject(String label, int value, List coList){ 
     this.label=label; 
     this.value=value; 
     this.coList=coList; 
    } 

    //getters and setters for the attributes 

} 

Затем создайте List<CustomObject> myCustomObjList=new ArrayList<CustomObject>() в вас класс держатель данных, в котором вы бы добавить элементы:

myCustomObjList.add(new CustomObject("label",1)); //no list 

final CustomObject obj2=new CustomObject("label2",2); 
final List<CustomObject> tmpList=new ArrayList<CustomObject>(); 
tmpList.add(obj2); 
myCustomObjList.add(new CustomObject("label",3,tmpList)); //CustomObject with a list 

и так далее ...

Вы затем может перебирать список, чтобы получить значения по мере необходимости. Сначала проверьте атрибут list каждого объекта CustomObject для null, если это не null, итетерируйте его.

Пример:

public static void main(String[] args) { 
     final List<CustomObject> myCustomObjList = new ArrayList<CustomObject>(); 
     List<CustomObject> tmpList = new ArrayList<CustomObject>(); 

     myCustomObjList.add(new CustomObject("ContractNetworkId", 24)); 
     myCustomObjList.add(new CustomObject("ContractProvider", 8)); 
     myCustomObjList.add(new CustomObject("ContractTariff", 16)); 
     myCustomObjList.add(new CustomObject("ContractSerialNumber", 32)); 

     CustomObject obj1 = new CustomObject("ContractCustomerProfile", 6); 
     CustomObject obj2 = new CustomObject("ContractCustomerNumber", 32); 

     tmpList.add(obj1); 
     tmpList.add(obj2); 

     myCustomObjList.add(new CustomObject("ContractCustomerInfoBitmap", 2, tmpList)); 

     tmpList=new ArrayList<CustomObject>(); 

     obj1 = new CustomObject("ContractPassengerClass", 8); 
     obj2 = new CustomObject("ContractPassengerTotal", 8); 

     tmpList.add(obj1); 
     tmpList.add(obj2);   

     myCustomObjList.add(new CustomObject("ContractPassengerInfoBitmap", 2, tmpList)); 

     for (CustomObject parent : myCustomObjList) { 
      System.out.print(parent.getLabel()+" ; "); 
      System.out.println(parent.getValue()); 

      if (parent.getCoList() != null) { 
       for (CustomObject child : parent.getCoList()) { 
        System.out.print(" "+child.getLabel()+" "); 
        System.out.println(child.getValue()); 
       } 
      } 
      else{ 
       System.out.println(" Parent does not contain children"); 
      } 
     } 
     tmpList.clear(); 
    } 

будет производить вывод:

 
ContractNetworkId ; 24 
Parent does not contain children 
ContractProvider ; 8 
Parent does not contain children 
ContractTariff ; 16 
Parent does not contain children 
ContractSerialNumber ; 32 
Parent does not contain children 
ContractCustomerInfoBitmap ; 2 
    ContractCustomerProfile 6 
    ContractCustomerNumber 32 
ContractPassengerInfoBitmap ; 2 
    ContractPassengerClass 8 
    ContractPassengerTotal 8 
0

Попробуйте это:

public class Test { 
    public static void main(String[] args) { 
     ContractDetail[][] contractDetails = { { new ContractDetail(24, "ContractNetworkId") }, 
       { new ContractDetail(2, "ContractPassengerInfoBitmap") }, 
       { new ContractDetail(8, "ContractPassengerClass"), new ContractDetail(8, "ContractPassengerTotal") } }; 

     for (ContractDetail[] contractDetailsAryOuter : contractDetails) { 
      for (ContractDetail contractDetailInnter : contractDetailsAryOuter) { 
       System.out.println("Contract Property: " + contractDetailInnter.getId() + ";" 
         + contractDetailInnter.getContractProperty()); 
      } 
     } 
    } 

} 

class ContractDetail { 
    private int id; 
    private String contractProperty; 

    public ContractDetail(int id, String contractProperty) { 
     super(); 
     this.id = id; 
     this.contractProperty = contractProperty; 
    } 

    public int getId() { 
     return id; 
    } 

    public void setId(int id) { 
     this.id = id; 
    } 

    public String getContractProperty() { 
     return contractProperty; 
    } 

    public void setContractProperty(String contractProperty) { 
     this.contractProperty = contractProperty; 
    } 
} 
Смежные вопросы