public class Json {

    public static void main(String[] args) {

        String fullPath = null;
//例如:fullPath="D:/myroot/test.json" // 生成json格式文件
try {
// 保证创建一个新文件
File file = new File("E:\\json");
if (!file.getParentFile().exists()) { // 如果父目录不存在,创建父目录
file.getParentFile().mkdirs();
}
if (file.exists()) { // 如果已存在,删除旧文件
file.delete();
}
file.createNewFile(); //以下创建json格式内容
//创建一个json对象,相当于一个容器
JSONObject root = new JSONObject();
root.put("name", "张三");
root.put("age", 20);
//假设身高是double,我们取小数点后一位
double height = 185.5345;
root.put("height", (double) (Math.round(height * 10) / 10.0)); JSONArray array = new JSONArray(); JSONObject major1 = new JSONObject(); major1.put("job1", "worker");
major1.put("job2", "doctor"); JSONObject major2 = new JSONObject();
major2.put("job3", "teacher");
major2.put("job4", "student"); array.add(major1);
array.add(major2);
root.put("major", array); //假设位置x,y都是double型的,现在对他们取整
double x = 30.0045;
double y = 30.1123;
JSONObject houloc = new JSONObject();
houloc.put("x", Math.round(x));
houloc.put("y", Math.round(y));
root.put("houseLocation", houloc); // 格式化json字符串
String jsonString = formatJson(root.toString()); // 将格式化后的字符串写入文件
Writer write = new OutputStreamWriter(new FileOutputStream(file), "UTF-8");
write.write(jsonString);
write.flush();
write.close();
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 返回格式化JSON字符串。
*
* @param json 未格式化的JSON字符串。
* @return 格式化的JSON字符串。
*/
public static String formatJson(String json) {
StringBuffer result = new StringBuffer(); int length = json.length();
int number = 0;
char key = 0; // 遍历输入字符串。
for (int i = 0; i < length; i++) {
// 1、获取当前字符。
key = json.charAt(i); // 2、如果当前字符是前方括号、前花括号做如下处理:
if ((key == '[') || (key == '{')) {
// (1)如果前面还有字符,并且字符为“:”,打印:换行和缩进字符字符串。
if ((i - 1 > 0) && (json.charAt(i - 1) == ':')) {
result.append('\n');
result.append(indent(number));
} // (2)打印:当前字符。
result.append(key); // (3)前方括号、前花括号,的后面必须换行。打印:换行。
result.append('\n'); // (4)每出现一次前方括号、前花括号;缩进次数增加一次。打印:新行缩进。
number++;
result.append(indent(number)); // (5)进行下一次循环。
continue;
} // 3、如果当前字符是后方括号、后花括号做如下处理:
if ((key == ']') || (key == '}')) {
// (1)后方括号、后花括号,的前面必须换行。打印:换行。
result.append('\n'); // (2)每出现一次后方括号、后花括号;缩进次数减少一次。打印:缩进。
number--;
result.append(indent(number)); // (3)打印:当前字符。
result.append(key); // (4)如果当前字符后面还有字符,并且字符不为“,”,打印:换行。
if (((i + 1) < length) && (json.charAt(i + 1) != ',')) {
result.append('\n');
} // (5)继续下一次循环。
continue;
} // 4、如果当前字符是逗号。逗号后面换行,并缩进,不改变缩进次数。
if ((key == ',')) {
result.append(key);
result.append('\n');
result.append(indent(number));
continue;
} // 5、打印:当前字符。
result.append(key);
} return result.toString();
} /**
* 单位缩进字符串。
*/
private static String SPACE = " "; /**
* 返回指定次数的缩进字符串。每一次缩进三个空格,即SPACE。
*
* @param number 缩进次数。
* @return 指定缩进次数的字符串。
*/
private static String indent(int number) {
StringBuffer result = new StringBuffer();
for (int i = 0; i < number; i++) {
result.append(SPACE);
}
return result.toString();
} }

生成json文件写入本地的更多相关文章

  1. 巧用前端神器,fakerjs生成json文件

    安装 cnpm install faker json-serve --save-dev 在目录下创建一个模板文件 示例 makeJson.js var faker = require('faker') ...

  2. Python 生成json文件

    1.数据准备 数据下载 2.python代码 import datetime import os import mssqlhelper ms = mssqlhelper.MSSQL(host=&quo ...

  3. 生成Json文件

  4. 第三天,爬取伯乐在线文章代码,编写items.py,保存数据到本地json文件中

        一. 爬取http://blog.jobbole.com/all-posts/中的所有文章     1. 编写jobbole.py简单代码 import scrapy from scrapy. ...

  5. node读取excel文件生成JSON

    当前的目录结构 excel的数据如下: node识别excel,先得安装  node-xlsx,用npm或yarn都可以 npm install  node-xlsx 或 yarn add node- ...

  6. Python-将json文件写入ES数据库

    1.安装Elasticsearch数据库 PS:在此之前需首先安装Java SE环境 下载elasticsearch-6.5.2版本,进入/elasticsearch-6.5.2/bin目录,双击执行 ...

  7. FileSaver.js导出json文件和文本

    最近刚刚写了个json数据导出生成Excel文件的,顺便总结下利用FileSaver.js导出其他文件的,这里要注意的一个点就是,当导出的是json文件或是txt文件时,导出的内容要是字符串,特别当时 ...

  8. iOS --生产JSON格式,创建JSON文件,创建文件夹,指定储存

    //生成json文件 - (void)onjson { //    如果数组或者字典中存储了  NSString, NSNumber, NSArray, NSDictionary, or NSNull ...

  9. JsonCpp——json文件的解析

    定义: 官网: http://json.org/ 在线解析器:http://json.cn/ http://www.bejson.com/ JSON(JavaScript Object Notatio ...

随机推荐

  1. js之运算符其它运算符(三元运算符,逗号运算符,void运算符,typeof,delete运算符)

    Javascript支持很多其它的运算符,具体如下: 一.条件运算符(?:) 条件运算符是Javascript中唯一的三个操作数的三元运算符,有时会直接称做是“三元运算符”. 基本格式:conditi ...

  2. struts.xml中package标签的子标签及顺序

    记录一下:

  3. 解决postgresql数据库localhost可以连接,ip连接不了的问题

    解决:windows环境下,postgresql数据库,localhost可以连接,ip地址连接不了. 解决办法: 1.打开postgresql安装目录下的配置文件 pg_hba.conf       ...

  4. 深入简出mysql--第一部分

    第二章: 1.sql分类 DDL(Data Definition Languages)语句:数据定义语言,这些语句定义了不同的数据段.数据库.表.列.索引等数据库对象的定义. 常用的语句关键字主要包括 ...

  5. Delphi 集合类型

  6. PAT Basic 1018 锤子剪刀布 (20 分)

    大家应该都会玩“锤子剪刀布”的游戏:两人同时给出手势,胜负规则如图所示: 现给出两人的交锋记录,请统计双方的胜.平.负次数,并且给出双方分别出什么手势的胜算最大. 输入格式: 输入第 1 行给出正整数 ...

  7. Lomsat gelral CodeForces - 600E (树上启发式合并)

    You are given a rooted tree with root in vertex 1. Each vertex is coloured in some colour. Let's cal ...

  8. zencart产品属性dropmenu select只有一个选择项时自动变成radio单选的解决办法

    includes\modules\classic\attributes.php 在大约786行代码 case ($products_options->RecordCount() == 1): 的 ...

  9. Codeforces 837D - Round Subset DP

    先算出每个数的pop1(twonum),pop(fivenum)然后DP ans[i][j]表示选i个数有j个2时最多有多少个5 转移方程是 ;j--) { ;w++) { ans[j][w]=max ...

  10. vsftpd 添加用户

    方法/步骤     首先要添加一个新的ftp用户并添加访问路径 useradd -d /alidata/www/ace ceshi        -d是用户的访问目录   为新添加的ftp用户设置密码 ...