1

我正在尝试将此 json 字符串转换回数组,但我似乎做不到

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

任何人都可以提供帮助,或者为我指出一些教程的正确方向。我试过 split(",") 等,但我真的不太清楚如何自己提取单词。

客户端代码:

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;

}
4

3 回答 3

2

编辑:我以前的答案不正确,请参阅这个新答案...

您没有正确使用 Gson ...... ...

首先,您在客户端中正确序列化您的数组,使用:

String json = gson.toJson(words);

然后你使用 Jersey API 发送它,我认为它是正确的(虽然我不是 Jersey 的专家......)

那么您的问题是您没有在 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 响应发生变化,即使只是轻微的变化,您也必须更改大量代码......始终使用库对于这种事情!

于 2013-05-12T13:51:50.410 回答
0

您可以尝试使用 String.format 来指定您希望作为请求的一部分传递的格式。例如:WebResource webResource = client.resource(" http://localhost:8090/RestSampleApp/rest/webservice/returnarray "); String input = String.format("{\manual format "}",parameter);

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

这就是我实现目标的方式

于 2015-01-16T11:08:23.963 回答
0

你最好使用 json 库,例如Jackson。如果您自己编写代码,您可以执行以下操作:

// 1st: remove [ and ]
s=s.substring(1, s.length()-1);
// 2nd: remove "
s=s.replaceAll("\"\"", "");
// 3rd: split
String[] parts = s.split(",");
于 2013-05-12T12:55:28.977 回答