如何去除无键值JSON数组的双引号并传递无多余引号的数组
解决JSONArray转字符串后外层带多余双引号的问题
问题分析
你遇到的情况是JSONArray调用toString()后,输出的字符串被额外的双引号包裹(如"["XXXXXXXX"]"),但预期格式是["XXXXXXXX"]。这种情况大概率是日志框架的显示效果(日志为了标识字符串类型自动添加了外层引号),而非JSONArray.toString()的实际返回值问题;少数情况是使用的JSON库实现异常。
解决方案
1. 验证实际字符串内容
先绕过日志,直接打印到控制台确认toString()的真实返回值:
JSONArray array = new JSONArray(); array.put(newUserId); String jsonStr = array.toString(); // 直接控制台打印,看真实内容 System.out.println("实际字符串内容:" + jsonStr);
如果控制台输出是["XXXXXXXX"],说明日志里的外层引号是日志框架的显示标记,实际字符串是符合要求的,直接传递jsonStr即可。
2. 手动去除外层双引号(仅当真实返回带引号时)
确认真实字符串确实带有外层双引号的话,可通过正则替换去掉首尾的双引号:
String jsonStr = array.toString().replaceAll("^\"|\"$", "");
3. 切换标准JSON库(推荐)
如果使用的是非标准JSON库导致异常,建议切换到主流库,比如:
使用Jackson:
import com.fasterxml.jackson.databind.ObjectMapper; ObjectMapper mapper = new ObjectMapper(); JSONArray array = new JSONArray(); array.put(newUserId); String jsonStr = mapper.writeValueAsString(array);
使用Gson:
import com.google.gson.Gson; Gson gson = new Gson(); JSONArray array = new JSONArray(); array.put(newUserId); String jsonStr = gson.toJson(array);
主流库的序列化方法会严格生成符合JSON规范的数组字符串,不会出现多余外层引号。
内容的提问来源于stack exchange,提问作者Bin
相关产品推荐
相关产品推荐

