2015-01-03 64 views
1

我需要模糊我的原始json字符串中存在的用戶id與另一個用戶ID。之後,我將構建一個全新的json字符串,但唯一的區別是用戶標識不同。如何通過更改一個特定的字段來創建一個新的json字符串?

舉個例子,如果我原來的JSON字符串是這樣的 -

{ 
"user_id":{"long":1234}, 
"client_id":{"int":0}, 
"affinity":[ 
       { 
       "try":{"long":55793}, 
       "scoring":{"float":0.19} 
       }, 
       { 
       "try":{"long":1763}, 
       "scoring":{"float":0.0114} 
       } 
      ] 
} 

然後我的新JSON字符串將是 - 唯一的區別是我有一個新的用戶ID,並遠離這一切都是相同。

{ 
"user_id":{"long":98765}, 
"client_id":{"int":0}, 
"affinity": [ 
       { 
       "try":{"long":55793}, 
       "scoring":{"float":0.19} 
       }, 
       { 
       "try":{"long":1763}, 
       "scoring":{"float":0.0114} 
       } 
      ] 
} 

我唯一的問題是,我不會有上述格式的JSON字符串只,所以我不能用POJO連載我的JSON字符串,因爲我的JSON字符串都會有不同的格式,但user_id場總是會就像我所有的json字符串一樣,它也是long。其他字段可能會有所不同,具體取決於我所擁有的json字符串。

我正在使用Gson來做到這一點。我有下面的方法,但不知道我怎麼能構建一個新的JSON newUserId在它和一切都應該是相同的?

private static String creatNewJson(String originalJsonResponse, long newUserId) { 
    JsonElement jelement = new JsonParser().parse(originalJsonResponse); 
    JsonObject jobject = jelement.getAsJsonObject(); 
    jobject = jobject.getAsJsonObject("user_id"); 

    // not sure what I should do here to construct a new json with newUserId 

} 

Gson不是正確的方法嗎?我應該使用正則表達式嗎?

+0

你可以試試這個 'jsobject.remove(「long」); jsobject.addProperty(「long」,newValue)' –

+0

然後,我將如何構造完整的json字符串與此jObject? – john

+0

它很容易,你可以使用'GSON.toJson(jsonObject);' http://google-gson.googlecode.com/svn/trunk/gson/docs/javadocs/com/google/gson/Gson.html# toJson(com.google.gson.JsonElement) –

回答

1

input.replaceAll("(\"user_id\":\\{\"long\":)\\d+", "$1" + newID)怎麼樣?

+0

感謝您的建議。如果可能的話,你能否爲我的理解目的添加一點解釋? $ 1是什麼意思? – john

+0

'$ 1'的意思是「與第一對括號中的正則表達式部分相匹配的字符串」,在這種情況下是數字之前的所有內容(實際ID)。在這種情況下(因爲我們知道我們正在查找的確切字符串),我們可以使用'「user_id:{\」long \「:」''來代替,但$ 1'更短。 在jdk文檔中,您可以在正則表達式中閱讀更多關於'replaceAll'的信息:[link](http://docs.oracle.com/javase/7/docs/api/java/lang/String.html#replaceAll(java .lang.String,%20java.lang.String)) – Dima

+0

@Dima,你可以編輯你的答案來更新它,這樣你就可以有更好的格式化選項,以便閱讀 – fejese

相關問題