2013-05-12 107 views
1

IAM嘗試這個JSON字符串轉換回數組,但我似乎無法做到這一點不能JSON字符串轉換爲普通字符串數組中的Java

["\"abba\"","\"repaper\"","\"minim\"","\"radar\"","\"murdrum\"","\"malayalam 
    \"","\"turrut\"","\"navan\""] 

誰能幫助,或點我在正確的一些教程的方向。我試過分裂(「,」)等,但我真的不太確定如何提取自己的話。

客戶端代碼:

Gson gson; 
    String[] words = { "hello", "Abba", "repaper", "Minim", "radar", 
      "murdrum", "malayalam", "cheese", "turrut","Navan" }; 

    gson = new Gson(); 
    String json = gson.toJson(words); 

    ClientConfig config = new DefaultClientConfig(); 
    Client client = Client.create(config); 
    WebResource service = client 
      .resource("http://localhost:8090/RestSampleApp/rest/webservice/returnarray"); 

    ClientResponse response = service.type(MediaType.APPLICATION_JSON) 
      .post(ClientResponse.class, json); 

    String output = response.getEntity(String.class); 
    //String target2 = gson.fromJson(json, String.class); 
    System.out.println(output); 

Web服務代碼:

@POST 
@Path("returnarray") 
@Consumes(MediaType.APPLICATION_JSON) 
@Produces(MediaType.APPLICATION_JSON) 
public String returnstuff(String list) { 

    list2 = list.substring(1, list.length() - 1); //gets rid of "[]" 
    temp = new ArrayList<String>(Arrays.asList(list2.split(","))); 
    Algorithim algo = new Algorithim(temp); // instance of algorithim class takes in arrayList 
    algo.getpalindromesarray(); //creates plaindrome arraylist 
    newlist = algo.getnewlist(); 

    String details = gson.toJson(newlist); 

    return details; 

} 
+0

不要試圖自己解析它使用JSON庫你的問題被標記。用'gson'。你在用嗎? – 2013-05-12 12:42:29

+0

是的,我嘗試使用json,但我不知道該怎麼辦。im將數據作爲數組發送到webservice。它們在編輯後重新調用它 – eoin 2013-05-12 12:50:41

+0

可以使用java函數解析它?像子字符串或溢出?它將definatly在這種情況下工作....我已經解析了JSON很多次,但在這裏你的情況斜槓是解析時產生問題 – KOTIOS 2013-05-12 12:54:21

回答

2

編輯:我以前的答案是不正確的,看到這個新的...

你沒有正確使用GSON ......你是序列化的對象,但你沒有做一個正確的反序列化...我建議你簡要看看Gson documentation,這幾行,你會更好地理解它...

首先你序列化你的陣列正確地在您的客戶端,與:

String json = gson.toJson(words); 

然後你使用API​​新澤西發送它,我認爲這是正確的(雖然我不是在新澤西州的專家...)

然後你的問題是,你是不是在正確的反序列化JSON你網絡服務。你應該分析作爲參數傳遞的JSON字符串,你可以用GSON做得一樣好,像這樣:

Gson gson = new Gson(); 
Type listOfStringsType = new TypeToken<List<String>>() {}.getType(); 
List<String> parsedList = gson.fromJson(list, listOfStringsType); 

現在你可以做任何你想要與你有一個正確的Java List工作的單詞列表。

一旦你完成你的工作,你序列再次List退貨,具有:

String details = gson.toJson(parsedList); 

現在你必須重複操作反序列化在客戶端解析響應,並再次獲得List<String> .. 。


:永遠不要試圖做這樣的事情序列化/反序列化JSON(或XML ...)手動。手動解決方案在特定情況下可以很好地工作,但它不能輕易適應變化,因此,如果您的JSON響應發生變化(即使只是輕微變化),您也必須更改大量代碼...始終使用庫對於這種事情!

+0

乾杯Miko。虐待它一開始。剛開始學習在澤西和它的服務的webservices讓我感到困惑 – eoin 2013-05-12 13:55:22

+0

@eoin請參閱已編輯的答案 – MikO 2013-05-12 16:23:44

+0

@eoin是我的解決方案嗎?如果不是,請發表評論,我會盡力幫助... – MikO 2013-05-12 22:26:06

0

你最好使用JSON庫,例如Jackson。如果你自己的代碼,你可以做象下面這樣:

// 1st: remove [ and ] 
s=s.substring(1, s.length()-1); 
// 2nd: remove " 
s=s.replaceAll("\"\"", ""); 
// 3rd: split 
String[] parts = s.split(","); 
+0

s = s.replaceAll(「\」\「」,「」); does not work。 – eoin 2013-05-12 13:13:28

+0

永遠不要嘗試手動解析JSON響應...使用庫 – MikO 2013-05-12 13:56:13

+0

是不是我沒有發送數組作爲Json對象?也許我應該這樣做,它在Web服務端處理它,併發回一個JSON對象? – eoin 2013-05-12 14:53:26

0

您可以嘗試使用String.format指定您想要作爲請求的一部分傳遞的格式。對於例如: WebResource webResource = client.resource(「http://localhost:8090/RestSampleApp/rest/webservice/returnarray」); String input = String。格式(「{\手動格式‘}’,參數);

 ClientResponse response = webResource.type("application/json").post(ClientResponse.class, input); 

這是我怎麼也來達到的我的目標