【发布时间】:2018-12-12 23:43:24
【问题描述】:
我有一个字符串,它是一个 JSON 数组,但它包含我不想要的字符:一些 " 和所有 \
这是字符串:["{\"id\":1,\"tel\":526833,\"date\":\"13/12\",\"message\":\"Test1\"}","{\"id\":2,\"tel\":526834,\"date\":\"13/12\",\"message\":\"Test2\"}"]
我希望它是这样的:[{"id":1,"tel":526833,"date":"13/12","message":"Test1"}","{"id":2,"tel":526834,"date":"13/12","message":"Test2"}]
我通过这样做摆脱了第一个和最后一个"
jsonResp = jsonResp.replaceAll("\"[{]", "{");
jsonResp = jsonResp.replaceAll("[}]\"", "}");
现在我需要删除 \,我尝试执行类似 jsonResp = jsonResp.replaceAll("\\", ""); 的操作,但我的 IDE 显示“非法/不支持的转义序列”。
如果你想测试,这是我的完整代码:
public static void main(String[] args) {
JsonArray jsonArray = new JsonArray();
SmsToSend smsToSend1 = new SmsToSend(1,526833,"Test1");
SmsToSend smsToSend2 = new SmsToSend(2,526834,"Test2");
jsonArray.add(new Gson().toJson(smsToSend1));
jsonArray.add(new Gson().toJson(smsToSend2));
String jsonResp = jsonArray.toString();
System.out.println(jsonResp);
jsonResp = jsonResp.replaceAll("\"[{]", "{");
jsonResp = jsonResp.replaceAll("[}]\"", "}");
jsonResp = jsonResp.replaceAll("\\", "");
System.out.println(jsonResp);
}
非常感谢您的帮助。
解决方案:
问题是new Gson().toJson(smsToSend) 返回一个字符串,所以jsonArray 是一个字符串数组。
我更改为new Gson().toJsonTree(smsToSend),它返回一个对象,现在它可以正常工作了。
public static void main(String[] args) {
JsonArray jsonArray = new JsonArray();
SmsToSend smsToSend1 = new SmsToSend(1,526833,"Test1");
SmsToSend smsToSend2 = new SmsToSend(2,526834,"Test2");
jsonArray.add(new Gson().toJsonTree(smsToSend1));
jsonArray.add(new Gson().toJsonTree(smsToSend2));
String jsonResp = jsonArray.toString();
System.out.println(jsonResp);
}
【问题讨论】:
-
我认为你应该找出为什么字符串是这样格式化的。通过删除字符,很有可能会弄乱格式并使其无法解析
-
您拥有的是 JSON 对象,它被编码为 JSON 数组中的字符串。首先,您应该弄清楚发生这种情况的原因和地点。如果源头无法修复,就解析两次,不要尝试手动修改。
-
看起来你有一个 JSON 字符串数组,即每个对象都已被字符串化,放入一个数组中,然后整个事物再次被字符串化。您应该能够将数组中的每个字符串解析为对象
-
好的,我找到了解决方案:问题是
new Gson().toJson(smsToSend2)返回一个字符串,所以数组是我更改为new Gson().toJsonTree(smsToSend2)的字符串数组,它返回一个对象,现在它工作正常。非常感谢 -
@Couldosh:你也可以回答你的问题。