【问题标题】:Remove quote from the JSONArray output从 JSONArray 输出中删除引号
【发布时间】:2014-03-19 17:30:05
【问题描述】:

在成功调用时,我得到了带有键“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


    【解决方案1】:

    只是

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

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

    或者在你的情况下

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

    【讨论】:

    • 谢谢 :) 效果很好。
    • @Ask 你不应该删除那些引号,你最好得到正确的字符串值。
    • @AminAbu-Taleb 我正在使用 JSONValue testValue = childJSONObject.get("name");但不是这个 String testValue = childJSONObject.getString("name");对我不起作用。出现一些铸造错误。
    【解决方案2】:

    将 JSONValue 转换回字符串:

    String.ValueOf(testValue);
    

    或者

    childJSONObject.getString("name");
    

    在这一切之后,仍然以引号结尾 - 然后回到正则表达式。

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

    【讨论】:

      【解决方案3】:

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

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

      它将返回一个不带引号的字符串。

      更多信息:JSONObject

      【讨论】:

      • 我正在使用 JSONValue testValue = childJSONObject.get("name");但不是这个 String testValue = childJSONObject.getString("name");对我不起作用。出现一些铸造错误。
      • 它不允许我应用 getString() 方法。只有我能够使用 get() 方法来实现。我的情况是 JSON 我自己包含双引号,所以如果在字符串中转换没有变化,因为字符串本身包含引号。
      • 有没有其他方法可以使用子字符串格式或其他方式从开头和结尾删除引号..?
      • +1 但仍未解决我的问题。只有在 testValue.toString().replaceAll("\"", ""); 的帮助下才能得到正确的结果;
      • 现在的正确答案是转换为 JsonString 然后使用 getString() 方法。
      【解决方案4】:

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

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

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

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

      【讨论】:

      • @Azzez:substrig 解决方案看起来不错。哪个是更好的 substring ot replaceAll() 。有什么想法...?
      • 在这两个选项中,子字符串是最好的选择。
      【解决方案5】:

      1. .replaceAll()

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

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

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

      2。子字符串()

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

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

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

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

      如果.getString() 不起作用,则.substring() 方法比.replaceAll() 更好。

      3. .ValueOf() 或 .getString()

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

      childJSONObject.getString("name");

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

      【讨论】:

      • 现在的正确答案是转换为 JsonString 然后使用 getString() 方法。
      【解决方案6】:

      如果使用 javax.json.JsonArray 你可以得到一个 JsonValue 的字符串:

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

      【讨论】:

        【解决方案7】:

        数组中的引号取决于所使用的 JOSN Lib:

        org.codehaus.jettison.json.JSONArray 要么 org.json.JSONArray

        【讨论】:

          【解决方案8】:
          JSON.parse(JSON.Stringify(this_has_quotes));
          

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

          【讨论】:

            【解决方案9】:

            对我有用的是

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

            【讨论】:

            • 其他的不行,所以分享了我的。请告诉我 -1 的原因。
            【解决方案10】:

            假设此处为com.google.gwt.json.client.*(来自问题标签和使用JSONValue,在其他任何地方都很难找到),toString() 旨在为您提供该值的 JSON 表示。

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

            testValue.isString().stringValue()
            

            【讨论】:

              【解决方案11】:

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

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

              【讨论】:

              • 在这些日子里,这是正确的答案。
              【解决方案12】:

              你可以使用下面的来获取不带双引号的字符串

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

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

              【讨论】:

                【解决方案13】:

                String mailMessage = JSONObject.toJSONString("JsonObject").replace("\"", " ").trim();

                【讨论】:

                • 你应该解释你的解决方案是如何工作的,而不是仅仅通过一些代码。
                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 2015-09-28
                • 2021-10-06
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2021-11-20
                相关资源
                最近更新 更多