2014-08-30 126 views
0

我从服务中获取此字符串。我想要一张地图或json。它应该看起来像这样。将字符串转换为HashMap

Map output 
    Total time taken:226006 
    nodea:10615 
    nodez:5308' 


String timingTrace = "Total time taken:226006.," 
      + "time spent in nodes:{\"nodea\":{\"timeTaken\":10615},\"nodez\":{\"timeTaken\":5308}}\""; 

我试过的是以下代码。我可以做更好的事吗?任何可轻松将上述字符串转换为图的库。

if (timingTrace != null) { 
     arrayofTimeStamp = StringUtils.splitByWholeSeparator(StringUtils.remove(timingTrace, " "), ".,"); 
    } 
String[] totaltime = StringUtils.split(arrayofTimeStamp[0], ":") 

Map<String,Object> timestamps = new HashMap<String, Object>(); 
timestamp.put(totaltime[0], totaltime[1]); 

String[] nodetimestamp = StringUtils.splitByWholeSeparator(arrayofTimeStamp[1], "time spent in nodes:"); 

getMapped(nodetimestamp[1]); 

public void getMapped(String json) throws JSONException, ParseException { 
    JSONObject obj = new JSONObject(json); 
    Iterator<String> keys = obj.keys(); 
    while (keys.hasNext()) { 
     String key = keys.next(); 
     String timetaken = JsonPath.read(json, "$." + key + ".timeTaken"); 
     timestamp.put(key, timetaken); 
    } 
} 
+0

你的代码有一些编译错误。请参阅下面的答案。 – 2014-08-30 11:17:19

回答

0

您正在使用timestamp地图<>在功能getMapped(String json),让你的错误,因为你没有通过它,你在函数声明的对象。

为了得到输出你提到的变化写下面的代码而不是函数getMapped(String json)

JSONObject obj = new JSONObject(nodetimestamp[1]); 
Iterator<String> keys = obj.keys(); 
while (keys.hasNext()) 
{ 
    String key = keys.next(); 
    String timetakenStr = obj.getString(key); 
    JSONObject child = new JSONObject(timetakenStr); 
    timestamps.put(key, child.getString("timeTaken")); 
} 

使用上面的代码你Map<>将包含相同的你提什么。 OutPut:

{nodea=10615, Total time taken=226006, nodez=5308}