2016-07-19 1 views
1

отличные люди Genius, мне нужна помощь в решении java-проблемы, связанной с java. В программе я делаю JDBC вызов и функция возвращает строку, подобную этой:Преобразование строки Java, возвращаемой с JDBC на объект Json

[[{PROD_CD=42, SHORT_DESC=WATERFALL EDGE}, {PROD_CD=31, SHORT_DESC=N/A}, {PROD_CD=51, SHORT_DESC=OGEE EDGE}]] 

Мне нужно избавиться от фигурных скобок, запятых, и сохранить его как объект JSON.

[ 
    { 
    "PROD_CD": " 42", 
    "SHORT_DESC": "WATERFALL EDGE", 
    }, 
    { 
    "PROD_CD": "31", 
    "SHORT_DESC": "N/A", 
    }, 
    { 
    "PROD_CD": "51", 
    "SHORT_DESC": "OGEE EDGE", 
    } 
] 

Я высоко ценю вашу помощь

Вот что я пытался до сих пор:

@Override 
    public Map<String, String> getEdgeCd() { 


     Map<String, String> EdgeCd = new HashMap<String, String>(); 
     Map<String,Object> temp = new HashMap<String,Object>(); 


     try { 


      SimpleJdbcCall fgetEdgeCd = new SimpleJdbcCall(jdbcTemplate) 
        .withSchemaName("logprd") 
        .withCatalogName("edge_api_pkg") 
        .withFunctionName("DDGetEdgeCd"); 


      temp = fgetEdgeCd.execute(); 
      System.out.println("temp " + temp + " \n\n\n\n\n\n"); 
      System.out.println("temp.values() " + temp.values() + " lines \n\n\n\n\n\n"); 

      String keyList = temp.values().toString(); 

// ЭТО КАК ВЕРНУТЬ следующую строку:

String keyList = "[[{PROD_CD=42, SHORT_DESC=WATERFALL EDGE}, {PROD_CD=31, SHORT_DESC=N/A}, {PROD_CD=51, SHORT_DESC=OGEE EDGE}]]"; 
String[] currentLine; 

currentLine = keyList.substring(3, keyList.length() -3).split("[}]|[{]"); 
String currenLineString = Arrays.toString(currentLine); 

String newCurrentLineString = currenLineString.substring(1, keyList.length()-1).replaceAll("," , "").replaceAll(" EDGE" , "-Edge").replaceAll("\\s+", " "); 
//System.out.println("newCurrentLineString:>"+ newCurrentLineString + "\n\n"); 
String[] testLine; 
testLine = newCurrentLineString.split(" "); 


ArrayList<LinkedHashMap<String, Object>> data = new ArrayList<LinkedHashMap<String, Object>>(); 
LinkedHashMap<String, Object> map=new LinkedHashMap<String, Object>(); 
Collection<String> keyValue = null; 
    for(int i=0; i< testLine.length; i++) { 
    String[] temp = testLine[i].toString().split("="); 
    keyValue.addAll(Arrays.asList(temp)); 
    System.out.println("keyValue"+i + ":>"+ keyValue.toString() + "\n\n"); 

    for (int j=0; j < keyValue.size(); j+=2) { 
    map.put(temp[j].toString(), temp[j+1].toString()); 
    //map.put(keyValue[i].toString(), keyValue[i+1].toString()); 
    //System.out.println("mapmain:>"+ map.toString() + "\n\n"); 
    data.add(map); 
    System.out.println(map.toString()); 
    System.out.println(data.toString()); 

    }//end for j 
    }end for i 
     } catch (Exception e) { 

      logger.error("Error trying JDBC"); 
    } 

     return EdgeCd; 
    } 

} 
+3

Вы пробовали писать код? – Abubakkar

+0

Вы пишете этот метод или это строка, предоставленная базой данных? Если да, какую базу данных вы используете? – Thomas

+0

@AbubakkarRangara Я попробовал – WalkerChou

ответ

0

Это ответ, , но не обязательно ответ, который вы хотите.

  1. Посмотрите данные, возвращаемые из базы данных. Обратите внимание, что он имеет очевидный шаблон.
  2. В данных, которые возвращаются из базы данных, есть три основных объекта; массив, контейнерный объект, пару ключ-значение. Массив - это массив объектов контейнера. Объект-контейнер содержит одну или несколько пар ключ-значение. Пара ключ-значение состоит из двух значений String.
  3. Создайте парсер, который анализирует данные, которые возвращаются из базы данных. Я рекомендую не пытаться «исправить» его с помощью регулярного выражения, просто проанализируйте его с помощью кода.
  4. Используя три объекта, упомянутые выше, создайте представление объектов с помощью анализатора (также упомянутое выше).
  5. Вывести объекты как json.
0

Это бесплатная функция на C#, которая легко переносится на JAVA (извините, у меня нет комбайнера JAVA на моем телефоне). Основные проблемы будут заключаться в допущении пробелов и экранирующих символов, если фигурные скобки или запятые появляются в данных записи.

 string data = "[[{PROD_CD=42, SHORT_DESC=WATERFALL EDGE}, {PROD_CD=31, SHORT_DESC=N/A}, {PROD_CD=51, SHORT_DESC=OGEE EDGE}]]"; 

     char[] chars = data.ToCharArray(); 
     StringBuilder currentRecord = null; 
     StringBuilder json = new StringBuilder("["); 

     bool isInCurly = false;// Loop state 
     for (int i=0;i<chars.Length; ++i) 
     { 
      if (chars[i] == '{') 
      { 
       isInCurly = true; 
       currentRecord = new StringBuilder("{"); 
      } 
      else if (chars[i] == '}') 
      { 
       currentRecord.Append("}"); 
       isInCurly = false; 

       // Major assumptions made here about the structure that will need to be verified such as ", " between record values, etc... 
       string cleanRecord = currentRecord.ToString().Replace("{", "{\"") 
                  .Replace("=", "\":\"") 
                  .Replace(", ", "\", \"") 
                  .Replace("}", "\"}"); 
       json.AppendLine(cleanRecord + ", "); 
      } 
      else if(isInCurly) 
      { 
       currentRecord.Append(chars[i]); 
      } 
     }    
     json.Append("]"); 
     string finalJson = json.ToString(); 

Результаты enter image description here

+0

Спасибо @Joseph Rosson – WalkerChou

+0

Если проблема решена, пожалуйста, не забудьте принять ответ. –

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