从JSONArray输出中移除引号

17

成功调用后,我将获得键为“objects”的JSONArray,并再次通过键为“name”的方式获取testValue。输出如下:

成功的调用会返回一个名为“objects”的JSONArray,其中包含了一个名为“name”的testValue。输出结果如下:

"Abcd"
"Wxyz"

我的代码如下:

public void onSuccess(JSONValue val) {
    JSONObject obj = val.isObject();
    JSONArray test = JSONUtil.getJSONArray(test, "objects");
    for (int i = 0; i < test.size(); i++) {
        JSONObject childJSONObject = (JSONObject) test.get(i);
        JSONValue testValue = childJSONObject.get("name");
        System.out.println(testValue);
    }
}

想要将名称打印为以下格式:(不带双引号)

Abcd
Wxyz
13个回答

19

1. .replaceAll()

testValue.toString().replaceAll("\"", "");

该方法将替换您名称中存在的所有双引号,但不包括第一个和最后一个。

例如:"Abcd"会变成Abcd,但如果名称是"Ab"cd",则根据您的要求应为Ab"cd,但它变成了Abcd。也就是说,所有双引号都被替换了。

2. substring()

如果想使用substring方法来处理,则可以使用以下语法从字符串中删除第一个和最后一个双引号:

testValue.toString().subString(1,testValue.toString().length()-1);

1 - 表示字符串的第一个字符

testValue.toString().length()-1: 表示字符串的最后一个字符。

对于您的情况,.substring() 方法比 .replaceAll() 更好,如果 .getString() 不起作用。

3. .ValueOf() 或者 .getString()

不知道在您的情况下为什么不起作用?(可能是因为字符串本身包含引号)否则,最好的方法是将 JSONValue 转换为字符串,如 String.ValueOf(testValue);

或者

childJSONObject.getString("name");

否则,请优先考虑:3 > 2 > 1


1
在当今这些日子里,正确的答案是将其转换为JsonString,然后使用getString()方法。 - Sebastião Santos
@user2070007的回答更为直接和正确,是处理这个问题的更好方式。 - Ashwin Prabhu

8

这个帖子很老,但我一个小时前遇到了同样的问题,并找到了正确的解决方案。您需要检查JsonValue的类型,如果是JsonString,则可以将其解析为JsonString并调用其getString()方法。

if(val.getValueType().equals(JsonValue.ValueType.STRING)) {
  c.setValue(((JsonString) val).getString());
} else {
  c.setValue(val.toString());
}

1
这些天,这是正确的答案。 - Sebastião Santos

7

将JSONValue转换回字符串:

String.ValueOf(testValue);

或者

childJSONObject.getString("name");

如果经过了所有这些步骤后还是得到引号 - 那么就回归正则表达式。

testValue.toString().replaceAll("\"", "");

3

只需要

s.replaceAll("\"", "");

删除字符串中所有的 " 字符。

在您的情况下

testValue.toString().replaceAll("\"", "");

谢谢 :) 运行良好。 - Ask
1
@Ask:您不应该删除那些引号,最好获取正确的字符串值。 - Amin Abu-Taleb
@AminAbu-Taleb 我正在使用JSONValue testValue = childJSONObject.get("name"); 但是,String testValue = childJSONObject.getString("name"); 对我来说不起作用,会出现一些转换错误。 - Ask

3
您可以使用以下内容来获取没有双引号的字符串。
    JsonObject childJSONObject = new JsonObject(); 
   JSONValue testValue = childJSONObject.get("name").getAsString();

这将返回不包含字符串中的双引号 " " 的字符串


2

如果使用javax.json.JsonArray,可以通过以下方式获取JsonValue的字符串:

JsonArray array = jsonObject.getJsonArray("languages");
for (int i=0; i<array.size(); i++) {
     System.out.println(array.getJsonString(i).getString());
}

2
您可以直接将值作为字符串获取,无需进行强制转换或替换:
JSONObject childJSONObject = (JSONObject) test.get(i);
String testValue = childJSONObject.getString("name");

它将返回一个没有引号的字符串。

更多信息:JSONObject


我正在使用 JSONValue testValue = childJSONObject.get("name"); 但是 String testValue = childJSONObject.getString("name"); 对我来说不起作用,会出现一些转换错误。 - Ask
它不允许我应用getString()方法,只能使用get()方法。在我的情况下,我获取的JSON本身包含双引号,因此如果转换为字符串,则没有变化,因为字符串本身包含引号。 - Ask
有没有其他的方法可以使用子字符串格式或其他方式从开头和结尾删除引号? - Ask
+1 但仍未解决我的问题。只有通过testValue.toString().replaceAll(""", "");才能得到正确的结果。 - Ask
1
在当今这些日子里,正确的答案是将其转换为JsonString,然后使用getString()方法。 - Sebastião Santos

2

数组中的引号取决于使用的JSON库:

org.codehaus.jettison.json.JSONArray 或者 org.json.JSONArray


1

将"JsonObject"转换为字符串,并替换掉其中的引号,最后去除空格。


你应该解释你的解决方案是如何工作的,而不仅仅是粘贴一些代码。 - fjsv

0

假设这里使用的是com.google.gwt.json.client.*(从问题标签和使用JSONValue可以看出,这个库几乎没有其他地方使用),toString()的目的是为了给你提供一个值的JSON表示。

在这里,该值是一个JSONString,因此您需要使用:

testValue.isString().stringValue()

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接