2013-10-27 4 views
-1

Мне нужно создать Json, который сформирует дерево, подобное структуре. Я написал код Java, который формирует такую ​​структуру, но не удовлетворяет цели. где я сделал это far..This мой Java класс ..Как создать иерархическую древовидную структуру Json с помощью java-программы

import com.google.gson.FieldNamingStrategy; 
import com.google.gson.Gson; 
import com.google.gson.GsonBuilder; 
import java.lang.reflect.Field; 
import java.util.ArrayList; 
import java.util.HashMap; 
import java.util.List; 
import java.util.Map; 

public class GsonProgram { 

public static void main(String... args) throws Exception { 
    String arr[] = {"Culture", "Salary", "Work", "Effort"}; 
    EntryListContainer entryListContainer = new EntryListContainer(); 
    List<Entry> entryList1 = new ArrayList<>(); 

    for (int i = 0; i < arr.length; i++) { 
     Entry entry1 = new Entry(); 
     Entry entry2 = new Entry(); 
     entry1.setChildren(arr[i]); 
     entryList1.add(entry1); 
     entryList2.add(entry2); 

    entryListContainer.setEntryList1(entryList1); 
    entryListContainer.setEntryList1(entryList2); 

    /*Root node this will collapse and get back to Original position on click*/ 
    entryListContainer.setName("Employee"); 

    entryListContainer.setName("manager"); 
    } 
    Map<String, String> mapping = new HashMap<>(); 
    mapping.put("entryList1", "name"); 
    mapping.put("entryList2", "name"); 
    Gson gson = new GsonBuilder().serializeNulls().setFieldNamingStrategy(new DynamicFieldNamingStrategy(mapping)).create(); 
    System.out.println(gson.toJson(entryListContainer)); 
} 

} класс DynamicFieldNamingStrategy реализует FieldNamingStrategy {

private Map<String, String> mapping; 

public DynamicFieldNamingStrategy(Map<String, String> mapping) { 
    this.mapping = mapping; 
} 

@Override 
public String translateName(Field field) { 
    String newName = mapping.get(field.getName()); 
    if (newName != null) { 
     return newName; 
    } 

    return field.getName(); 
     } 
    } 

    class EntryListContainer { 

private List<Entry> entryList1; 

public void setEntryList1(List<Entry> entryList1) { 
    this.entryList1 = entryList1; 
} 

public List<Entry> getEntryList1() { 
    return entryList1; 
    } 
} 

class Entry { 

private String name; 

public String getChildren() { 
    return name; 
} 

public void setChildren(String name) { 
    this.name = name; 
    } 
} 

и это сгенерированный JSON

{ 
"name":[{ 
    "name":"Salary" 
},{ 
    "name":"Salary" 
},{ 
    "name":"Work" 
},{ 
    "name":"Doller" 
}] 
} 

Но я хочу эту структуру ...

{ 
"name":"Employee", 
"children":[{ 
    "name":"Salary" 
},{ 
    "name":"Salary" 
},{ 
    "name":"Work" 
},{ 
    "name":"Doller" 
}] 
} 

Мне нужен этот формат json.somebody пожалуйста помочь ....

ответ

0

Структура псевдо-класс должен быть:

class DynamicFieldNamingStrategy{ 
    private String name; 
    private List<Entry> children; 

} 

GsonProgram

public class GsonProgram { 

    public static void main(String... args) throws Exception { 
     Entry entry1 = new Entry(); 
     entry1.setChildren("Salary"); 
     Entry entry2 = new Entry(); 
     entry2.setChildren("Salary"); 
     Entry entry3 = new Entry(); 
     entry3.setChildren("Work"); 
     Entry entry4 = new Entry(); 
     entry4.setChildren("Doller"); 
     EntryListContainer entryListContainer = new EntryListContainer(); 
     ArrayList<Entry> entryList1 = new ArrayList<Entry>(); 


     entryList1.add(entry1); 
     entryList1.add(entry2); 
     entryList1.add(entry3); 
     entryList1.add(entry4); 

     entryListContainer.setEntryList1(entryList1); 
     entryListContainer.setName("Employee"); 

     Map<String, String> mapping = new HashMap<String, String>(); 
     mapping.put("entryList1", "name"); 



     Gson gson = new GsonBuilder().serializeNulls().setFieldNamingStrategy(new DynamicFieldNamingStrategy(mapping)).create(); 
     System.out.println(gson.toJson(entryListContainer)); 
    } 
} 

EntryListContainer

class EntryListContainer { 

    private List<Entry> children; 
    private String name; 

    public String getName() { 
     return name; 
    } 

    public void setName(String name) { 
     this.name = name; 
    } 

    public void setEntryList1(List<Entry> entryList1) { 
     this.children = entryList1; 
    } 

    public List<Entry> getEntryList1() { 
     return children; 
    } 
} 

Выход:

{ 
    "children": [ 
     { 
      "name": "Salary" 
     }, 
     { 
      "name": "Salary" 
     }, 
     { 
      "name": "Work" 
     }, 
     { 
      "name": "Doller" 
     } 
    ], 
    "name": "Employee" 
} 
+0

спасибо Максим Shoustin – lucifer

+0

@Maxmim вы можете помочь мне с кодом, что я должен сделать, чтобы поддерево из детей, т.е. I хочу сделать дерево из doller там также будет три узла 1> зарплата 2> работа 3> ответственность – lucifer

+0

Я делаю это, но последнее добавленное имя entryListContainer, то есть менеджер, приходит. будем ли вы помогать мне ??? – lucifer

Смежные вопросы