2016-06-28 2 views
2

Java를 사용하여 비교 데이터 A와 각 데이터를 생성했습니다.Json String을 List <HashMap <String, String >>으로 변환하려면 어떻게해야합니까?

먼저, txt 파일 (파일의 배열 유형)에서 배열 데이터를 추출했습니다.

둘째, 데이터베이스 (MySQL 열 유형 : JSON)에 Json String 데이터가 있습니다.

나는 TXT 파일을 구문 분석하고 목록을

FileInputStream fstream = new FileInputStream(Path); 
List<HashMap<String, String>> list = list(fstream); 

public List<HashMap<String, String>> list(FileInputStream fstream) { 
    BufferedReader buff = new BufferedReader(new InputStreamReader(fstream)); 
    List<HashMap<String, String> list = new ArrayList<>(); 

    try { 
    while ((strLine = buff.readLine()) != null) { 
     s = strLine.split(" "); 
     HashMap<String, String> map = new HashMap<>(); 
     pts = s[4].split(":")[1]; 
     ptstime = s[5].split(":")[1]; 
     map.put("pts", pts); 
     map.put("ptstime", getDurationString(ptstime)); 
     if (pts_itv.equals("0") && ptstime_itv.equals("00:00")) { 
     map.put("pts_itv", "0"); 
     map.put("ptstime_itv", "00:00"); 
     } 
     else { 
     map.put("pts_itv", String.valueOf(Long.parseLong(pts) - Long.parseLong(pts_itv))); 
     map.put("ptstime_itv", getDurationString(String.valueOf(String.format("%.4f", Double.parseDouble(ptstime) - Double.parseDouble(ptstime_itv))))); 
     } 
     pts_itv = pts; 
     ptstime_itv = ptstime; 
     list.add(map); 
    } 
    } 
    catch (IOException ex) { 
     LOG.error("ERROR : " + ex.getLocalizedMessage() + ", " + ex.getMessage()); 
    } 
    finally { 
    try { 
     buff.close(); 
    } catch (IOException ex) {} 
    } 
    return list; 
} 

추출 데이터

나는 인덱스 키를 얻을 수 있습니다
[{pts_itv=0, ptstime=00:00:00.112792, pts=2707, ptstime_itv=00:00}, {pts_itv=192192, ptstime=00:00:08.12079, pts=194899, ptstime_itv=00:00:08.80}, {pts_itv=128128, ptstime=00:00:13.4595, pts=323027, ptstime_itv=00:00:05.3387}, {pts_itv=277277, ptstime=00:00:25.127, pts=600304, ptstime_itv=00:00:11.5532}] 

, 객체 키를 확인합니다.

list.get(0).get("pts_itv"); 

그리고 두 번째 데이터 (MySQL의에서 SELECT 쿼리 (열 JSON 유형))

rs = Web.getInstance().getList(idx); //get data by sql query 
jObj = (JSONObject) new JSONParser().parse(rs); 
jArr = (JSONArray) jObj.get("data"); 
for (int i = 0; i < jArr.size(); i++) { 
    JSONObject Jarr = (JSONObject) jArr.get(i); 
    System.out.println(Jarr.get("PtsData")); 
} 

PtsData 내가 PtsData 먼저 데이터 형식으로 변환 할

[{"pts": "81831", "pts_itv": "0", "ptstime": "00:00:03.40963", "ptstime_itv": "00:00"}, {"pts": "127877", "pts_itv": "46046", "ptstime": "00:00:05.32821", "ptstime_itv": "00:00:01.9186"}, {"pts": "157907", "pts_itv": "30030", "ptstime": "00:00:06.57946", "ptstime_itv": "00:00:01.2512"}] 
java.lang.String 

입니다. PtsData를 목록 유형으로 변환하려면 어떻게해야합니까?

+1

[jackson] (https://github.com/FasterXML/jackson) 또는 [Gson] (https://github.com/google/gson) – Sampada

+0

감사합니다 Sampada를 사용하십시오. 나는 gson.fromJson을 사용하여 해결했다 :) – ofleaf

답변

0

다음은이 문제를 해결하기위한 몇 가지 제안 사항입니다.

  1. JSON 라이브러리를 사용하여 JSON 데이터를 구문 분석하여 분리하지 않고도 String 연산을 사용하지 않아도됩니다. 더 많은 코드를 작성하고, 더 많은 버그를 도입하고 필요한 유지 관리를 더 많이 수행하십시오.
  2. 개체 모델링을 사용하십시오. HashMap에서 이것을 사용하는 것이 더 읽기 쉽습니다. peroperties pts, pts_itv, ptstime, ptstime_itv를 정의하여 객체 모델을 생성하십시오. 그러면 키와 값을 선택하십시오. 같음과 해시 코드를 정의하십시오. 그런 다음 자신의 방법으로 객체의 평등을 확인하거나 equals를 사용하십시오.
관련 문제