我有以下问题:
我在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]}]
头寸的价值应该没有引号。我怎么能意识到这一点?
非常感谢提前
迎接
答案 0 :(得分:4)
使用String#replaceAll()
方法替换位置值周围的双引号。只需创建一个正则表达式并用空的sting替换双引号。
尝试积极的外观和积极的前瞻。
示例代码:
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
答案 1 :(得分:0)
我认为你不应该这样,可能你应该改变你的工作结构,但如果你想手动进行类型转换,那么你可以这样做。 假设你有一个像这样的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);
}
答案 2 :(得分:0)
考虑使用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();