Jakarta JSON处理:如何获取数组元素的纯字符串值?
解决Jakarta JSON获取数组元素纯字符串值的问题
你当前通过JsonValue.toString()得到带引号的"abc",是因为该方法返回的是符合JSON格式的字符串表示。要获取不带引号的纯字符串内容,只需将数组返回的JsonValue强转为JsonString类型,再调用getString()方法即可。
修改后的代码示例
import jakarta.json.*; import java.io.StringReader; String str = "{ \"test\": [\"abc\", \"xyz\"], \"test2\": \"blabla\" }"; JsonReader jr = Json.createReader(new StringReader(str)); JsonObject jo = jr.readObject(); // 处理普通字符串字段(原代码保留) JsonString js = jo.getJsonString("test2"); System.out.println(js.toString()); // 输出 "blabla" System.out.println(js.getString()); // 输出 blabla // 处理数组中的字符串元素 JsonArray testArray = jo.getJsonArray("test"); // 方式1:直接强转(确定元素是字符串类型时可用) JsonString firstElement = (JsonString) testArray.get(0); System.out.println(firstElement.getString()); // 输出 abc // 方式2:先判断类型(更安全,避免类型转换异常) JsonValue jv = testArray.get(0); if (jv.getValueType() == JsonValue.ValueType.STRING) { JsonString jsElement = (JsonString) jv; System.out.println(jsElement.getString()); // 输出 abc }
原理说明
JsonArray的get()方法返回的是通用的JsonValue接口,它涵盖了所有JSON数据类型(字符串、数字、布尔等)。当数组元素是字符串时,其实际实现类是JsonString,强转后调用getString()就能获取原始的纯字符串值;而JsonValue.toString()会输出该值的JSON标准格式,因此字符串类型会被加上引号。
内容的提问来源于stack exchange,提问作者chris01
相关产品推荐
相关产品推荐

