需求:将一个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对象带有格式的写出到文件中的更多相关文章

  1. 【转】如何把Json格式字符写进text文件中

    http://www.cnblogs.com/insus/p/4306640.html http://json2csharp.chahuo.com/ 本篇一步一步学习怎样把显示于网页的json格式的字 ...

  2. 如何把Json格式字符写进text文件中

    本篇一步一步学习怎样把显示于网页的json格式的字符串写进text文件中,并保存起来.学习到创建model, Entity, 序列化List<object>转换为json,显示于网页上.然 ...

  3. 如何将Unicode文本写到日志文件中

    有时为了定位问题,我们需要结合打印日志来处理.特别是较难复现的,一般都需要查看上下文日志才能找出可能存在的问题.考虑到程序要在不同语言的操作系统上运行,程序界面显示要支持Unicode,打印出来的日志 ...

  4. 在Android中把内容写到XML文件中

    在Android中把内容写到XML文件中 saveXmlButton.setOnClickListener(new OnClickListener() { @Override public void ...

  5. delegate 集成在类中,还是单独写在.h文件中?

    转:http://stackoverflow.com/questions/11382057/declaring-a-delegate-protocol There definitely are sub ...

  6. linux中,通过crontab -e编辑生成的定时任务,写在哪个文件中

    环境描述: 操作系统:Red Hat Enterprise Linux Server release 6.6 (Santiago) 内核版本:2.6.32-504.el6.x86_64 需求描述: 一 ...

  7. Python--代码1(接口测试:测试用例从数据库读取写到yaml文件中)

    一. 从数据库中读取全部接口,并写入yaml文件 数据库中的数据存储格式如下图: import pymysql import os import json # from ruamel import y ...

  8. Spark Shuffle(一)ShuffleWrite:Executor如何将Shuffle的结果进行归并写到数据文件中去(转载)

    转载自:https://blog.csdn.net/raintungli/article/details/70807376 当Executor进行reduce运算的时候,生成运算结果的临时Shuffl ...

  9. 一些常用的文本文件格式(TXT,JSON,CSV)以及如何从这些文件中读取和写入数据

    TXT文件: txt是微软在操作系统上附带的一种文本格式,文件以.txt为后缀. 从txt文件中读取数据: with open ('xxx.txt') as file: data=file.readl ...

随机推荐

  1. storage disk

    scsi fdisk -l can not display the new disk Rescan the SCSI Bus to Add a SCSI Device Without rebootin ...

  2. 编译错误:/usr/bin/ld: cannot find -lz

    编译时出现错误/usr/bin/ld: cannot find -lz,安装zlib和zlib-devel yum install zlib yum install zlib-devel

  3. DevExpress 为TextEdit设置水印文字

    设置水印代码: //设置水印值public static void SetWatermark(this TextEdit textEdit, string watermark) { textEdit. ...

  4. Windows Phone 二、WP控件

  5. $.ajx的用法

    $.ajax({type:'post',//可选geturl:'action.php',//这里是接收数据的PHP程序data:'data='dsa'',//传给PHP的数据,多个参数用&连接 ...

  6. Centos 6.5安装bugzilla 5.0.2

    1. 下载bugzilla 下载地址:https://ftp.mozilla.org/pub/webtools/ 因为我在github上搜了一下“bugzilla cn”提示有中文语言包就下了5.0. ...

  7. Swift

    1.Swift项目与OC项目的区别 - Swift的类文件是以 .swift 结尾 - main.m 不见了,程序入口以 `@UIApplicationMain` - Swift中,代码都是写到 `{ ...

  8. bootstraptable插件文档的坑

    1.事件onCheck中文档参数为row, $element正确的顺序为$element,row eg: $Table.on('check.bs.table', function ($element, ...

  9. ios webView 放大网页解决/input 获得焦点focus 网页放大 解决

    新手遇到的问题: 终于找到原因,各种HTML viewport 都试过 setScalePageToFit 也试过,webViewDidFinishLoad加JS代码,动态算webView.scrol ...

  10. iOS多线程同步锁

    在iOS中有几种方法来解决多线程访问同一个内存地址的互斥同步问题: 方法一,@synchronized(id anObject),(最简单的方法)会自动对参数对象加锁,保证临界区内的代码线程安全 @s ...