【问题标题】:cant convert json string to regular string array in java无法在java中将json字符串转换为常规字符串数组
【发布时间】:2013-05-12 12:21:53
【问题描述】:

我正在尝试将此 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;

}

【问题讨论】:

  • 不要尝试自己解析。使用 json 库。您的问题被标记为gson。你在用吗?
  • 是的,我正在尝试使用 json,但我不确定该怎么做。我将数据作为数组发送到 Web 服务。他们在编辑后重新调整它
  • 可以用java函数解析吗?像子串或溢出?在这种情况下它肯定会起作用....我已经多次解析 json 但在你的情况下,斜线在解析时会出现问题
  • 这种情况是你发送一个String[] 到一个Web 服务,它返回那个JSON 响应?这正是您从 Web 服务获得的响应吗?这甚至不是有效的 JSON,太多了"
  • 尚不清楚为什么您在 JSON 中引用了双引号。使用标准 JSON 解析将导致包含值 "abba"abba 的字符串,例如。

标签: java json parsing jersey gson


【解决方案1】:

编辑:我之前的答案不正确,请看这个新答案...

您没有正确使用 Gson...您正在很好地序列化对象,但您没有进行正确的反序列化...我建议您简要查看 Gson documentation,它只有几行,您会更好地理解它...

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

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&lt;String&gt;...


注意:您永远不应该尝试手动执行序列化/反序列化 JSON(或 XML...)之类的操作。手动解决方案在特定情况下可能工作得很好,但它不能轻易适应变化,因此,如果您的 JSON 响应发生变化,即使只是轻微的变化,您也必须更改大量代码......始终使用库对于这种事情!

【讨论】:

  • 干杯巫女。生病试一试。刚开始在球衣中学习 web 服务,这让我有点困惑
  • @eoin 我的解决方案适合你吗?如果没有,请发表评论,我会尽力帮助...
【解决方案2】:

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

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

【讨论】:

  • 永远不要尝试手动解析 JSON 响应...使用库!
  • 是不是我没有将数组作为 Json 对象发送?也许我应该在 web 服务端对其进行处理并返回一个 json 对象??
【解决方案3】:

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

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

这就是我实现目标的方式

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-10-29
    • 2020-05-26
    • 1970-01-01
    • 1970-01-01
    • 2023-03-19
    • 1970-01-01
    相关资源
    最近更新 更多