Java中json字符串的格式转换(缩进换行)
来源:互联网 发布:php 高德地图api 编辑:程序博客网 时间:2024/06/10 10:40
最近项目用到com.fasterxml.jackson.databind.ObjectMapper
把对象转换为json
字符串,但是它的输出总是只有一行的结果,如:
{"queryType":"lucene_timeseries","dataSource":"druid-test","granularity":"all","context":{"timeout":1800,"useOffheap":true,"groupByStrategy":"v2"},"aggregations":[{"type":"lucene_hyperUnique","name":"ageCount","fieldName":"age"}],"intervals":"1000/3000"}
这和我们经常看到的有缩进换行格式的json
字符串有所不同,把结果输出为一行也不利于我们查看和比对,出了错误也要费心查找。
在网上搜索了一下,发现已有人针对以上的问题写了一些转换程序,但其实这里面的原理不难,所以打算自己写一下练手,同时记录在这里方便以后的取用。
- 源程序如下:
import java.io.ByteArrayInputStream;import java.io.ByteArrayOutputStream;import java.io.IOException;/** * Created by chenyuzhi on 17-7-28. */public class JsonFormater { public static String format(String jsonStr){ try { ByteArrayInputStream in = new ByteArrayInputStream(jsonStr.getBytes()); ByteArrayOutputStream out = new ByteArrayOutputStream(); char ch; int read; int space=0; while((read = in.read()) > 0){ ch = (char)read; switch (ch){ case '{': { space = outputAndRightMove(space, ch, out); break; } case '[': { out.write(ch); space += 2; break; } case '}': { space = outputAndLeftMove(space, ch, out); break; } case ']': { space = outputAndLeftMove(space, ch, out); break; } case ',': { out.write(ch); outputNewline(out); out.write(getBlankingStringBytes(space)); break; } default: { out.write(ch); break; } } } return out.toString(); } catch (IOException e){ e.printStackTrace(); } return null; } public static int outputAndRightMove(int space, char ch, ByteArrayOutputStream out) throws IOException { //换行 outputNewline(out); //向右缩进 out.write(getBlankingStringBytes(space)); out.write(ch); outputNewline(out); space += 2; //再向右缩进多两个字符 out.write(getBlankingStringBytes(space)); return space; } public static int outputAndLeftMove(int space, char ch, ByteArrayOutputStream out) throws IOException{ outputNewline(out); space -= 2; out.write(getBlankingStringBytes(space)); out.write(ch); return space; } public static byte[] getBlankingStringBytes(int space){ StringBuilder sb = new StringBuilder(""); for (int i = 0; i < space; i++) { sb.append(" "); } return sb.toString().getBytes(); } public static void outputNewline(ByteArrayOutputStream out){ out.write('\n'); }}
- 测试程序如下:
import io.sugo.DataUtil.JsonFormater;import java.io.IOException;public class Test01 { public static void main(String[] args) throws IOException { String str = "{\"queryType\":\"lucene_timeseries\",\"dataSource\":\"druid-test\",\"granularity\":\"all\",\"context\":{\"timeout\":1800,\"useOffheap\":true,\"groupByStrategy\":\"v2\"},\"aggregations\":[{\"type\":\"lucene_hyperUnique\",\"name\":\"ageCount\",\"fieldName\":\"age\"}],\"intervals\":\"1000/3000\"}"; println(JsonFormater.format(str)); } public static void println(String str){ System.out.println(str); }}
- 测试结果如下:
{ "queryType":"lucene_timeseries", "dataSource":"druid-test", "granularity":"all", "context": { "timeout":1800, "useOffheap":true, "groupByStrategy":"v2" }, "aggregations":[ { "type":"lucene_hyperUnique", "name":"ageCount", "fieldName":"age" } ], "intervals":"1000/3000"}
阅读全文
0 0
- Java中json字符串的格式转换(缩进换行)
- dom4j 创建缩进换行格式的xml,并输出xml到字符串中
- JAVA中数个字符串转换为JSON格式的字符串
- Java中对象的list与JSON格式字符串的互相转换
- android中普通的java对象转换成 json格式的字符串
- 将json格式的数组字符串转换为java集合
- java将实体对象转换成JSON格式的字符串
- Java中字符串格式与日期格式的转换
- JSON基础-java中JSON字符串的转换
- 在Js(Jquery)中,字符串与JSON格式互相转换的示例(直接运行例子)
- javascript中json格式的字符串与json数据的转换
- java中把List转成json数组格式的字符串
- java中数组转换为json格式
- Java中拼接json格式字符串
- Java生成XML的缩进和换行
- android/java中把对象、对象bean、Collection以及字符串转换成Json格式数据
- 转换一个xml格式的字符串到json格式
- json格式字符串与json对象相互转换的函数
- 怎么理解面向对象和面向过程到底的本质区别?
- HTML5的离线存储
- 设置input标签内容不能复制
- Find The Multiple POJ
- 杭电acm—2076 夹角有多大(题目已修改,注意读题)
- Java中json字符串的格式转换(缩进换行)
- LeetCode 563 Binary Tree Tilt
- js,angularjs 图片上传服务器,并解决照片旋转问题,前端图片压缩上传
- tensorflow训练权重保存和调用——tf.saver()
- 模拟实现STL中的list
- 漫话数据采集之杂谈
- SSH下,处理问题No Session,createCriteria,Could not open connection
- R数据读取和写入
- DoTween 笔记2