You need to enable JavaScript to run this app. 如何在JsonObject中正确添加数组类型字段,避免数组被转义为字符串
优惠活动
大模型
产品
解决方案
定价
更多

如何在JsonObject中正确添加数组类型字段,避免数组被转义为字符串

问题根因与修复方案

错误根源

你当前的输出不符合预期,核心原因完全是类型识别错误导致的:

  • 你定义的mUserArray虽然内容看起来像数组,但实际类型是String,本质是一段被序列化的JSON格式文本,字符串内部的双引号已经被做了转义处理。
  • 不管是手动new JsonArray后把整串文本当元素加进去,还是用JsonPrimitive封装后赋值,或是直接通过addProperty给字段传这个字符串值,JSON序列化工具都会把这段内容识别为普通字符串值,不会自动解析字符串内部的数组结构。
  • 最终输出里出现的"usernames":"[\"user1\", \"user2\"]",就是序列化工具对普通字符串值里的双引号做自动转义的结果,和要求的数组类型字段完全不匹配。

正确实现方式

场景1:可调整传参逻辑(推荐)

从Fragment传参环节就不要把用户名单序列化成字符串再传输,直接传递原生String[]或List<String>类型的用户列表,构造JSON时逐个填充数组元素即可:

// 从Fragment参数中直接获取真实的用户名单列表
List<String> usernameList = getNavArgs().getUsernames();
JsonArray userArray = new JsonArray();
// 把每个用户名作为独立元素加入数组
for (String username : usernameList) {
    userArray.add(username);
}

JsonObject jo = new JsonObject();
jo.addProperty("type", "value");
jo.add("usernames", userArray);

场景2:无法调整传参,仅能拿到字符串格式的数组文本

不需要手动拆分字符串拼接数组,直接通过JSON解析器把现有字符串解析为原生JsonArray节点,再赋值给对应字段即可:

// 现有拿到的字符串值,内容为 ["user1", "user2"]
String mUserArray = "[\"user1\", \"user2\"]";
// 直接将字符串解析为JSON数组节点,无需手动处理转义符
JsonArray parsedUserArray = JsonParser.parseString(mUserArray).getAsJsonArray();

JsonObject jo = new JsonObject();
jo.addProperty("type", "value");
jo.add("usernames", parsedUserArray);

避坑提醒:addProperty方法仅适合给字段赋值字符串、数字、布尔这类基础类型值,赋值JSON结构类型(数组、嵌套对象)时,必须传入对应的JsonObject/JsonArray类型节点,不要直接传序列化后的字符串文本,否则必然会生成转义后的字符串字段。


内容的提问来源于stack exchange,提问作者sejn

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.27 14:36:05