我试图将这个json字符串转换回数组,但我似乎无法做到这一点
["\"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);
网络服务代码:
@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 :(得分:2)
编辑:我之前的回答不正确,请看这个新答案......
你没有正确使用Gson ...你正在很好地序列化这些对象,但是你没有做正确的反序列化......我建议你简要介绍Gson documentation,这几行和你会更好地理解它......
首先,在您的客户端中正确地序列化您的数组:
String json = gson.toJson(words);
然后你使用Jersey API发送它,我认为它是正确的(虽然我不是泽西岛的专家......)
然后问题是您没有在Web服务中正确反序列化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响应发生变化,即使只是轻微变化,您也必须更改大量代码...始终使用库对于这种事情!
答案 1 :(得分:0)
你最好使用json库,例如Jackson。如果你自己编码,你可以这样做:
// 1st: remove [ and ]
s=s.substring(1, s.length()-1);
// 2nd: remove "
s=s.replaceAll("\"\"", "");
// 3rd: split
String[] parts = s.split(",");
答案 2 :(得分:0)
您可以尝试使用String.format指定您希望作为请求的一部分传递的格式。 对于Ex: WebResource webResource = client.resource(&#34; http://localhost:8090/RestSampleApp/rest/webservice/returnarray&#34;); String input = String.format(&#34; {\ manual format&#34;}&#34;,parameter);
ClientResponse response = webResource.type("application/json").post(ClientResponse.class, input);
这就是我实现目标的方式