如何为提取的JSON数据应用prettyPrint格式化输出?
JSON提取结果格式化输出解决方案
问题根源
- 最初写法中,
json.getString("projects[1]")返回的是普通字符串,String类没有prettyPrint()方法,因此调用无效。 - 后续尝试Gson时,直接将字符串传入
toJson(),Gson会把它当作普通文本转义输出,而非解析为JSON结构后格式化。
可行方案
方案1:利用JsonPath内置格式化功能
直接获取JSON节点对象,使用JsonPath自带的格式化工具输出:
Response response = basicAuth.accept(ContentType.JSON).get(uri); ResponseBody body = response.getBody(); JsonPath json = new JsonPath(body.asString()); // 获取JSON节点对象而非字符串 Object projectNode = json.get("projects[1]"); // 用JsonPath的格式化功能生成美观的JSON字符串 String prettyJson = JsonPath.parse(projectNode).jsonString(JsonFormatting.PRETTY); System.out.println("I extracted this project " + prettyJson);
方案2:通过Gson正确解析后格式化
先将提取的JSON字符串解析为JSON元素,再用带格式化配置的Gson输出:
Response response = basicAuth.accept(ContentType.JSON).get(uri); ResponseBody body = response.getBody(); JsonPath json = new JsonPath(body.asString()); // 获取原始JSON结构字符串 String projectJsonStr = json.getString("projects[1]"); // 解析为JsonElement Gson gson = new Gson(); JsonElement projectElement = gson.fromJson(projectJsonStr, JsonElement.class); // 配置Gson为格式化模式并输出 Gson prettyGson = new GsonBuilder().setPrettyPrinting().create(); String prettyJson = prettyGson.toJson(projectElement); System.out.println("I extracted this project " + prettyJson);
方案3:简化版Gson用法
直接将JsonPath获取的节点对象传给Gson格式化,省去字符串解析步骤:
Response response = basicAuth.accept(ContentType.JSON).get(uri); ResponseBody body = response.getBody(); JsonPath json = new JsonPath(body.asString()); Object projectNode = json.get("projects[1]"); Gson prettyGson = new GsonBuilder().setPrettyPrinting().create(); String prettyJson = prettyGson.toJson(projectNode); System.out.println("I extracted this project " + prettyJson);
内容的提问来源于stack exchange,提问作者GetTok
相关产品推荐
相关产品推荐

