无法将json字符串转换为java中的常规字符串数组

时间:2013-05-12 12:21:54

标签: java json parsing jersey gson

我试图将这个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;

}

3 个答案:

答案 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);

这就是我实现目标的方式