从JSONArray输出中删除引号

问题描述 投票:7回答:12

在成功调用时,我使用键“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
java json gwt arrays jsonobject
12个回答
14
投票

1. .replaceAll()

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

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

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

2. substring()

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

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

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

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

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

3. .ValueOf()OR .getString()

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

要么

childJSONObject.getString("name");

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


0
投票

假设com.google.gwt.json.client.*在这里(来自问号标签和JSONValue的使用,这在其他地方几乎找不到),toString()旨在为您提供值的JSON表示。

这里的值是JSONString,所以你需要使用:

testValue.isString().stringValue()

-1
投票
JSON.parse(JSON.Stringify(this_has_quotes));

是你所需要的全部! JSON.Stringify()将相应地获得密钥的价值。并且JSON.parse()将解析您的值并返回“干”值而不引用。


-1
投票

对我有用的是

defect.get("FormattedID").toString().substring(1,defect.get("FormattedID").toString().length()-1)

7
投票

将JSONValue转换回String:

String.ValueOf(testValue);

要么

childJSONObject.getString("name");

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

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

2
投票

只是

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

删除字符串中的所有“字符”。

或者在你的情况下

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

2
投票

您可以将值作为String本身获取,不需要强制转换或替换:

JSONObject childJSONObject = (JSONObject) test.get(i);
String testValue = childJSONObject.getString("name");

它将返回一个没有引号的String。

更多信息:JSONObject


1
投票

在使用javax.json.JsonArray的情况下,您可以获取JsonValue的String,以便:

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

1
投票

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

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


1
投票

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

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

1
投票

您可以使用以下内容来获取没有双引号的字符串

    JsonObject childJSONObject = new JsonObject(); 
   JSONValue testValue = childJSONObject.get("name").getAsString();

这给出了字符串中没有双引号" "的字符串


0
投票

最好的选择是使用JSONObject的.getString()方法或String的.valueOf()方法。您也可以使用.replaceAll("\"",""),但是当字符串本身包含嵌入其中的"(双引号)时,这会有一些问题。因此,避免使用replaceAll()方法来摆脱意外问题。

但是,如果你想用手自己编码或者如果你想知道如何在不使用getString() and .valueOf()的情况下删除双引号,你可以尝试这样

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

它将给出不包括String的第一个和最后一个字符的子字符串。但是,这似乎是一些混乱的事情。

© www.soinside.com 2019 - 2024. All rights reserved.