从JSONArray输出中删除引号

Ask*_*Ask 9 java arrays gwt json jsonobject

在成功调用时,我使用键"objects"获取JSONArray,并使用键"name"获取testValue.输出如下:

"Abcd"
"Wxyz"
Run Code Online (Sandbox Code Playgroud)

我的代码如下:

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);
    }
}
Run Code Online (Sandbox Code Playgroud)

想要打印如下名称:(没有双引号)

Abcd
Wxyz
Run Code Online (Sandbox Code Playgroud)

Vai*_*ain 15

1. .replaceAll()

testValue.toString().replaceAll("\"", "");
Run Code Online (Sandbox Code Playgroud)

此方法替换您名称中出现的所有双引号,而不是第一个和最后一个.

示例:"Abcd"变为Abcd,但如果名称为"Ab"cd,则"它应该是Ab"cd,根据您的要求,但它变为Abcd.意思是说所有的双引号都被取代了.

2. substring()

如果要使用子字符串方法方法,请使用以下语法从字符串中删除第一个和最后一个双引号:

testValue.toString().subString(1,testValue.toString().length()-1);
Run Code Online (Sandbox Code Playgroud)

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

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

对于你的情况,.substring()方法比.replaceAll()如果.getString()不工作更好.

3. .ValueOf()OR .getString()

不知道在你的情况下为什么它不工作?(可能是因为字符串本身包含引号)其他最好的方法是将JSONValue转换为字符串asString.ValueOf(testValue);

要么

childJSONObject.getString("name");

否则优先选择:3> 2> 1


Bit*_*map 7

将JSONValue转换回String:

String.ValueOf(testValue);
Run Code Online (Sandbox Code Playgroud)

要么

childJSONObject.getString("name");
Run Code Online (Sandbox Code Playgroud)

在所有这些之后仍然以报价结束 - 然后回到RegExp.

testValue.toString().replaceAll("\"", "");
Run Code Online (Sandbox Code Playgroud)


小智 5

这个线程已经很老了,但我在一小时前偶然发现了同样的问题并找到了正确的解决方案。您必须检查 JsonValue 的类型,如果是 JsonString,则可以将其解析为 JsonString 并调用其 getString() 方法。

if(val.getValueType().equals(JsonValue.ValueType.STRING)) {
  c.setValue(((JsonString) val).getString());
} else {
  c.setValue(val.toString());
}
Run Code Online (Sandbox Code Playgroud)