Java 从JSONArray输出中删除引号

Java 从JSONArray输出中删除引号,java,json,gwt,arrays,jsonobject,Java,Json,Gwt,Arrays,Jsonobject,在成功的调用中,我将获得键为“objects”的JSONArray,以及键为“name”的testValue。输出如下所示: “Abcd” “Wxyz” 我的代码如下: public void onSuccess(JSONValue val){ JSONObject obj=val.isObject(); JSONArray test=JSONUtil.getJSONArray(测试,“对象”); 对于(int i=0;i2>1 您可以获取JsonValue的字符串,以便: JsonArray

在成功的调用中,我将获得键为“objects”的JSONArray,以及键为“name”的testValue。输出如下所示:

“Abcd”
“Wxyz”
我的代码如下:

public void onSuccess(JSONValue val){
JSONObject obj=val.isObject();
JSONArray test=JSONUtil.getJSONArray(测试,“对象”);
对于(int i=0;i
要按如下方式打印名称:(不带双引号)

Abcd
Wxyz
只要

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

还是你的情况

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

将JSONValue转换回字符串:

String.ValueOf(testValue);

在所有这些之后,仍然以引号结束-然后回到RegExp

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

您可以将值作为字符串本身获取,无需强制转换或替换:

JSONObject childJSONObject = (JSONObject) test.get(i);
String testValue = childJSONObject.getString("name");
它将返回一个不带引号的字符串


更多信息:

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

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

testValue.toString().subString(1,testValue.toString().length())
它将给出子字符串,不包括字符串的第一个字符和最后一个字符。但是,这似乎有些混乱。

1..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()或.getString()

不知道在您的情况下它为什么不起作用?(可能是因为字符串本身包含引号)从另一方面来说,最好的方法是将JSONValue转换为字符串作为
string.ValueOf(testValue);

childJSONObject.getString(“名称”);


否则,如果使用javax.json.JsonArray,请优先选择:3>2>1

您可以获取JsonValue的字符串,以便:

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

for(int i=0;i数组中的引号取决于使用的JOSN库:

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

JSON.parse(JSON.Stringify(this_has_quotes));
这就是您所需要的!
JSON.Stringify()
将相应地获取密钥的值。而
JSON.parse()
将解析您的值并返回不带引号的“干”值。

对我有效的是

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

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

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

testValue.isString().stringValue()

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


您可以使用下面的命令获取不带双引号的字符串

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

这使得字符串中没有双引号。

字符串mailMessage=JSONObject.toJSONString(“JSONObject”)。替换(\”,“”)。trim();

谢谢:)效果很好。@Ask您不必删除这些引号,您最好获取正确的字符串值。@AminAbu Taleb我使用的是JSONValue testValue=childJSONObject.get(“name”);而不是这个字符串testValue=childJSONObject.getString(“name”);不适用于我。出现一些强制转换错误。我正在使用JSONValue testValue=childJSONObject.get(“名称”);而不是这个字符串testValue=childJSONObject.getString(“name”);不适用于我。出现一些强制转换错误。它不允许我应用getString()方法。只有我能够用get()方法实现。我的情况是JSON本身包含双引号,因此如果在字符串中转换,则不会更改,因为字符串本身包含引号。是否有其他方法可以使用子字符串格式或其他方式从开头和结尾删除引号?+1但仍然无法解决我的问题。只有在testValue.toString().replaceAll(“\”,“”)的帮助下才能得到正确的结果;在这些日子里,正确的答案是强制转换到JsonString,然后使用getString()方法。@Azzez:子字符串解决方案看起来不错。哪个子字符串比replaceAll()更好.有什么想法吗…?在这两个选项中,子字符串是最好的选项。其他选项不起作用,所以我分享了我的。请告诉我-1的原因。你应该解释你的解决方案是如何工作的,而不仅仅是通过一些代码。在这些日子里,这是正确的答案。正确的答案,在这些日子里,是转换为JsonString,然后使用getString()方法。
defect.get("FormattedID").toString().substring(1,defect.get("FormattedID").toString().length()-1)
testValue.isString().stringValue()
if(val.getValueType().equals(JsonValue.ValueType.STRING)) {
  c.setValue(((JsonString) val).getString());
} else {
  c.setValue(val.toString());
}
    JsonObject childJSONObject = new JsonObject(); 
   JSONValue testValue = childJSONObject.get("name").getAsString();