2017-02-16 8 views
0
List<Map<String, List<Map<String, Object>>>> ListMapTermMapList = new ArrayList<Map<String,List<Map<String ,Object>>>>(); 

вводКак преобразовать сложный вложенный список отображения в JSon объект

[ 
    { 
     Inventories= 
     [ 
     {FINANCIAL_BLOCK=Balance Sheet, COUNTRY_ID=8, TAXONOMY_ID=34, VALUE=279.7, COMPANY_STAGING_ID=9433, FINANCIAL_NAME=Inventories, COMPANY_CODE=LENZ, TYPE=companyFinal, COMPANY_ID=31, REPORTED_IN_FINANCIALS=Inventories, SUB_BLOCK=Current Assets, _version_=1559400052581990400}, {FINANCIAL_BLOCK=Balance Sheet, COUNTRY_ID=1, TAXONOMY_ID=34, VALUE=1122.0, COMPANY_STAGING_ID=102049, FINANCIAL_NAME=Inventories, COMPANY_CODE=APPLE, TYPE=companyFinal, COMPANY_ID=2, REPORTED_IN_FINANCIALS=Inventories, SUB_BLOCK=Current Assets, _version_=1559400052590379009} 
     ] 
    }, 

    { 
     High Performance Mixed Signal (HPMS)= 
     [ 
     {FINANCIAL_BLOCK=Income Statement, EXTENSION_NAME=Work performed by the Group and capitalized, COUNTRY_ID=8, TAXONOMY_ID=17602, VALUE=7.5, COMPANY_STAGING_ID=9564, FINANCIAL_NAME=Other Operating Income, COMPANY_CODE=LENZ, TYPE=companyFinal, COMPANY_ID=31, REPORTED_IN_FINANCIALS=Work performed by the Group and capitalized, SUB_BLOCK=Operating Block, _version_=1559400052606107648}, {FINANCIAL_BLOCK=Income Statement, EXTENSION_NAME=Work performed by the Group and capitalized, COUNTRY_ID=8, TAXONOMY_ID=17602, VALUE=30269.0, COMPANY_STAGING_ID=8926, FINANCIAL_NAME=Other Operating Income, COMPANY_CODE=LENZ, TYPE=companyFinal, COMPANY_ID=31, REPORTED_IN_FINANCIALS=Work performed by the Group and capitalized, SUB_BLOCK=Operating Block, _version_=1559400052663779330} 
     ] 
    } 
] 

Я пытаюсь преобразовать этот сложный вложенный список отображения в объект JSON с помощью Джексона картографа.

createJson(map); 

Функция для преобразования является:

public static String createJson(Object obj) throws JsonGenerationException,JsonMappingException, IOException 
{ 
    org.codehaus.jackson.map.ObjectMapper mapper = new org.codehaus.jackson.map.ObjectMapper(); 
    SimpleDateFormat sdf = new SimpleDateFormat(DF); 
    mapper.getSerializationConfig().setDateFormat(sdf); 
    String json = mapper.writeValueAsString(obj); 
    return json; 
} 

Исключение

org.codehaus.jackson.map.JsonMappingException: (был java.lang.UnsupportedOperationException) (через ссылка: java.util.ArrayList [0] -> java.util.HashMap ["Inventories"] -> java.util.ArrayList [0])

+0

Что ваш актуальный вопрос , соответственно, какая ошибка дает текущая реализация? Что возвращает 'createJson (...)' и какой желаемый результат? – trylimits

+0

Ошибка: Исправлено исключение, вызванное выполнением обработчика: org.springframework.http.converter.HttpMessageNotWritableException: Не удалось написать контент: (был java.lang.UnsupportedOperationException) (через цепочку ссылок: java.util.HashMap ["соответствует "] -> java.util.ArrayList [0] -> java.util.HashMap [" Запасы "] -> java.util.ArrayList [0]); Вложенное исключение - это com.fasterxml.jackson.databind.JsonMappingException: (было java.lang.UnsupportedOperationException) (через цепочку ссылок: java.util.HashMap ["соответствие"] -> java.util.ArrayList [0] -> java. util.HashMap ["Inventories"] -> java.util.ArrayList [0]) – amankishan

+0

ввод выглядит как список объектов, поэтому он должен быть List >>>>> или сопоставить его с соответствующим POJO, если у вас есть – Barath

ответ

0

Я думаю Gson сохранит вашу жизнь в этом случае:

Проверьте это пример того, как использовать его:

public static void main(String[] args) 
{ 
    //Part 1 
    Map<String ,Object> map1 = new HashMap<>(); 
    map1.put("FINANCIAL_BLOCK", "Balance Sheet"); 
    map1.put("COUNTRY_ID", 8); 

    List<Map<String ,Object>> inventoriesList = new ArrayList<>(); 
    inventoriesList.add(map1); 

    Map<String,List< Map<String ,Object> > > inventoriesMap = new HashMap<>(); 
    inventoriesMap.put("Inventories", inventoriesList); 

    //Part 2 
    Map<String ,Object> map2 = new HashMap<>(); 
    map2.put("FINANCIAL_BLOCK", "Income Statement"); 
    map2.put("COUNTRY_ID", 8); 

    List<Map<String ,Object>> highPerformanceList = new ArrayList<>(); 
    highPerformanceList.add(map2); 

    Map<String,List< Map<String ,Object> > > highPerformanceMap = new HashMap<>(); 
    highPerformanceMap.put("High Performance Mixed Signal (HPMS)", highPerformanceList); 

    //Collect 
    List<Map<String, List<Map<String, Object>>>> ListMapTermMapList = new ArrayList< Map<String,List< Map<String ,Object> > > >(); 
    ListMapTermMapList.add(inventoriesMap); 
    ListMapTermMapList.add(highPerformanceMap); 

    //Format to Json 
    System.out.println(new Gson().toJson(ListMapTermMapList)); 


} 

Выход:

[ 
    { 
     "Inventories": [ 
      { 
       "FINANCIAL_BLOCK": "Balance Sheet", 
       "COUNTRY_ID": 8 
      } 
     ] 
    }, 
    { 
     "High Performance Mixed Signal (HPMS)": [ 
      { 
       "FINANCIAL_BLOCK": "Income Statement", 
       "COUNTRY_ID": 8 
      } 
     ] 
    } 
] 
+0

Использование Gson: [{"Inventories": [null, null, null, null]}, {"Высокопроизводительный смешанный сигнал (HPMS)": [null, null, null, null]}, {"Branded": [null, null, null, null]}, {"Generics": [null, nu ll, null, null]}, {"Cas h и их эквиваленты" : [null, null, null, null]}, {"Group": [null, null, null, null]}, {"Стандартные продукты": [null, null, null, null]}, {"Корпоративные и Другое ": [null, null, null, null]}, {" Others ": []}, {" Total Revenue ": [null, null, null, null]}, {" Injectables ": [null, null, nu ll, null]}, {"Сеть дебиторской задолженности": [null, null, null, null]}] - все карты nestes преобразуются в нуль – amankishan

+0

Можете ли вы рассказать, как вы надуваете свой ListMapTermMapList с данными? или попробуйте распечатать его System.out.println (ListMapTermMapList) перед тем, как передать его новому Gson(). toJson(), чтобы увидеть, что содержит –

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