将JSON对象带有格式的写出到文件中
需求:将一个JSON对象写出到文件中,要求文件中的JSON数据带有简单的格式。代码的实现参考了Java算法中的栈处理括号匹配问题。好了,不多说了,下面是代码的实现。
代码:
package gemu.test.json; import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer; import net.sf.json.JSONArray; public class WritePrettyJSON { public static void main(String[] args) throws IOException { File file = new File("D:/json.json");
String jsonStr = "[{a:1,b:{b1:[{a:2},{a:1}]},c:3},{a:1},{b:1}]";
// String jsonStr = "{a:1,b:{b1:[{a:2},{a:1}]},c:3,a:2,b:2}";
JSONArray jsonObj = JSONArray.fromObject(jsonStr);
// JSONObject jsonObj = JSONObject.fromObject(jsonStr); char[] stack = new char[1024]; // 存放括号,如 "{","}","[","]"
int top = -1; String string = jsonObj.toString();
StringBuffer sb = new StringBuffer();
char[] charArray = string.toCharArray();
for (int i = 0; i < charArray.length; i++) {
char c = charArray[i];
if ('{' == c || '[' == c) {
stack[++top] = c; // 将括号添加到数组中,这个可以简单理解为栈的入栈
sb.append(charArray[i] + "\n");
for (int j = 0; j <= top; j++) {
sb.append("\t");
}
continue;
}
if ((i + 1) <= (charArray.length - 1)) {
char d = charArray[i+1];
if ('}' == d || ']' == d) {
top--; // 将数组的最后一个有效内容位置下标减 1,可以简单的理解为将栈顶数据弹出
sb.append(charArray[i] + "\n");
for (int j = 0; j <= top; j++) {
sb.append("\t");
}
continue;
}
}
if (',' == c) {
sb.append(charArray[i] + "\n");
for (int j = 0; j <= top; j++) {
sb.append("\t");
}
continue;
}
sb.append(c);
} Writer write = new FileWriter(file);
write.write(sb.toString());
write.flush();
write.close();
}
}
将JSON对象带有格式的写出到文件中的更多相关文章
- 【转】如何把Json格式字符写进text文件中
http://www.cnblogs.com/insus/p/4306640.html http://json2csharp.chahuo.com/ 本篇一步一步学习怎样把显示于网页的json格式的字 ...
- 如何把Json格式字符写进text文件中
本篇一步一步学习怎样把显示于网页的json格式的字符串写进text文件中,并保存起来.学习到创建model, Entity, 序列化List<object>转换为json,显示于网页上.然 ...
- 如何将Unicode文本写到日志文件中
有时为了定位问题,我们需要结合打印日志来处理.特别是较难复现的,一般都需要查看上下文日志才能找出可能存在的问题.考虑到程序要在不同语言的操作系统上运行,程序界面显示要支持Unicode,打印出来的日志 ...
- 在Android中把内容写到XML文件中
在Android中把内容写到XML文件中 saveXmlButton.setOnClickListener(new OnClickListener() { @Override public void ...
- delegate 集成在类中,还是单独写在.h文件中?
转:http://stackoverflow.com/questions/11382057/declaring-a-delegate-protocol There definitely are sub ...
- linux中,通过crontab -e编辑生成的定时任务,写在哪个文件中
环境描述: 操作系统:Red Hat Enterprise Linux Server release 6.6 (Santiago) 内核版本:2.6.32-504.el6.x86_64 需求描述: 一 ...
- Python--代码1(接口测试:测试用例从数据库读取写到yaml文件中)
一. 从数据库中读取全部接口,并写入yaml文件 数据库中的数据存储格式如下图: import pymysql import os import json # from ruamel import y ...
- Spark Shuffle(一)ShuffleWrite:Executor如何将Shuffle的结果进行归并写到数据文件中去(转载)
转载自:https://blog.csdn.net/raintungli/article/details/70807376 当Executor进行reduce运算的时候,生成运算结果的临时Shuffl ...
- 一些常用的文本文件格式(TXT,JSON,CSV)以及如何从这些文件中读取和写入数据
TXT文件: txt是微软在操作系统上附带的一种文本格式,文件以.txt为后缀. 从txt文件中读取数据: with open ('xxx.txt') as file: data=file.readl ...
随机推荐
- CSS深入理解之margin
前言 改变容器尺寸 margin改变容器尺寸有以下两个限制条件: 使用于没有设置宽高的普通block元素float/absolute/fixed元素 以及 inlines水平 table- ...
- FORTRAN 90标准函数(一) (转)
符号约定: l I代表整型;R代表实型;C代表复型;CH代表字符型;S代表字符串;L代表逻辑型;A代表数组;P代表指针;T代表派生类型;AT为任意类型. l s:P表示s类型为P类型(任意kind ...
- ASPX.Net控件
简单控件 Label :显示文字,编译后的元素的为span 主要设置属性边框包括边框颜色,边框样式,边框粗细 Liteal :显示文字,编译后不会产生任何元素,一般用来从后台输出JS代码 Textbo ...
- freemarker配置信息
<!-- <!– freemarker的配置 –> <bean id="freemarkerConfigurer" class="org.spr ...
- WebApi 通过类名获取类并实例化
环境:Web Api 返回值类型为DTO实体,继承基类DTO---BaseResultDto public class BaseResultDto { /// <summary> /// ...
- tomcat7 配置
引用:http://blog.csdn.net/mengxiangbaidu/article/details/7020484 1.安装JDK, 2.安装, apt-get install tomca ...
- Extjs swfUpload 多图片上传
一.属性介绍 类型 默认值 描述 upload_url String 处理上传文件的服务器端页面的url地址,可以是绝对地址,也可以是相对地址,当为相对地址时相对的是当前代码所在的文档地址 p ...
- 用于svn添加当前目录下所有未追踪的文件,和删除所有手动删除的文件的脚本
由于要经常用到类似与 git 中的 git add --all 这种操作,但是发现svn中并不支持类似的操作. 虽然可以使用 wildcard 进行匹配,但是 wildcard是在shell中进行匹配 ...
- 【原创】如何用Android Studio断点安卓自带Service或Bind类型的Service
很久以来,我一直想找一种方法来断点调试安卓系统自身的Service,或者bind类型的Service,比如我想看WifiManager里面的getWifiApConfiguration函数是如何实现的 ...
- 在64位SQL Server中创建Oracle的链接服务器
当我们同时使用SQL Server和Oracle来存储数据时,经常会用到跨库查询.为了方便使用跨库查询,一个最好的办法就是通过创建链接服务器来实现.既可以在SQL Server中创建Oracle的链接 ...