【问题标题】:Remove quotes from json array从 json 数组中删除引号
【发布时间】:2014-07-16 11:58:30
【问题描述】:

我有以下问题:

我在 Java 中有一个 ArrayList。

我将 ArrayList 转换为这样的字符串:

Gson gson = new Gson();
String feeds += gson.toJson(arrayList);

这是结果:

[{"status":"ERROR","position":"[48.2748206,8.849529799999999]"}]

但我需要以下输出:

[{"status":"ERROR","position": [48.2748206,8.849529799999999]}]

位置的值应该不带引号。我怎么能意识到这一点?

在此先感谢

问候

【问题讨论】:

  • 所以你想要 ERROR 引号但没有它们的位置,我认为这是不可能的。如果需要,您可以随时删除引号,或将其类型转换为位置(自定义)对象。
  • 是的,这就是我想要的。
  • 正如我所提到的,您必须手动从位置值中删除引号并将其转换为您希望的某个对象。不能直接用gson完成。
  • 我不明白。你能举个例子吗?
  • 该值必须以 JSON 数组而不是字符串开头。在源 ArrayList 中,它显然是一个字符串。

标签: java json gson arrays


【解决方案1】:

使用String#replaceAll() 方法替换位置值周围的双引号。只需创建一个正则表达式并用空字符串替换双引号。

尝试使用正向后视和正向前瞻。

示例代码:

String json = "[{\"status\":\"ERROR\",\"position\":\"[48.2748206,8.849529799999999]\"}]";
String regex = "(?<=\"position\":)\"|\"(?=\\}\\])";
System.out.println(json.replaceAll(regex, ""));

这里是DEMO


也可以尝试分组和替换。

示例代码:

String json = "[{\"status\":\"ERROR\",\"position\":\"[48.2748206,8.849529799999999]\"}]";
String regex = "(\"position\":)\"([^\"]*)\"";
System.out.println(json.replaceAll(regex, "$1$2"));

这里是DEMO

【讨论】:

  • 就是这样!!!非常感谢 :-) 最后一个问题:如果输出如下所示,正则表达式必须是什么样子:[{"status":"ERROR","position":"[48.2748206,8.849529799999999]","entityType": “你好”}] ?
  • 检查查找位置值双引号的第二个选项。在演示中测试
【解决方案2】:

我认为你不应该这样,也许你应该改变你的工作结构,但是如果你确实想手动进行类型转换,那么你可以这样做。 假设你有一个这样的 JSONArray 对象:

JSONArray arr=[{"status":"ERROR","position":"[48.2748206,8.849529799999999]"}];

然后你可以像这样取出JSONObject:

Iterator iterator = array.iterator();

while(iterator.hasNext()){
    Gson gson = new Gson();
    ClassToCastInto obj = gson.fromJson((JsonElement)iterator.next();, ClassToCastInto.class);
    System.out.println(obj.someProperty);

}

【讨论】:

    【解决方案3】:

    考虑使用 Gson JsonWriter

        StringWriter buffer = new StringWriter();
        JsonWriter writer = new JsonWriter(buffer);
        writer.beginArray().beginObject();
        writer.name("status").value("ERROR");
        writer.name("position").beginArray();
        for (double value : Arrays.asList(48.2748206, 8.849529799999999)) {
            writer.value(value);
        }
        writer.endArray().endObject().endArray().close();
        String json = buffer.toString();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-06-16
      • 2021-11-29
      • 2019-06-04
      • 2020-02-29
      • 2015-09-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多