Zhihao's Studio.

用Java生成Json文件

Word count: 843 / Reading time: 4 min
2014/04/24 Share

Json

Json是什么

【百度百科】JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。它基于ECMAScript的一个子集。 JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C、C++、C#、Java、JavaScript、Perl、Python等)。这些特性使JSON成为理想的数据交换语言。 易于人阅读和编写,同时也易于机器解析和生成(网络传输速率)。

Json语法规则

JSON 语法是 JavaScript 对象表示语法的子集。
1.数据在键值对中
2.数据由逗号分隔
3.花括号保存对象
4.方括号保存数组
例如:

1
2
3
4
5
6
7
8
9
{
"people":[
{"firstName":"Brett","lastName":"McLaughlin","email":"aaaa"},
{"firstName":"Jason","lastName":"Hunter","email":"bbbb"},
{"firstName":"Elliotte","lastName":"Harold","email":"cccc"}
]
}

Java写入Json格式数据到.json格式文件

用Java生成json格式的文件分成两步,第一步是生成json格式数据,第二步是将json格式的数据写入文件

生成json格式数据

生成json格式的数据是借助json-lib所需的全部jar包做到的,可以到这里免费下载全部所需的jar包。下载完成后,导入到项目中。
这些jar包可以将List、Map、Bean、数组等转成json格式的数据,非常方便。下面的代码示例中,给出了一部分的例子。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
List<String> list = new ArrayList<String>();
list.add("hello");
list.add("world");
HashMap<String,String> map = new HashMap<String,String>();
map.put("name", "attribute a");
map.put("id","dingdangmao");
people p1 = new people("zhangsan","310504","552339",259034);
people p2 = new people("zhangsi","52083","85640",42153);
people p3 = new people("zhangwu","515910","828669",362642);
people p4 = new people("zhangliu","315910","728669",562642);
people p5 = new people("zhangqi","415910","928669",162642);
ArrayList<String> m = new ArrayList<String>();
m.add(new String(p1.toString()));
m.add(new String(p2.toString()));
m.add(new String(p3.toString()));
m.add(new String(p4.toString()));
m.add(new String(p5.toString()));
JSONArray j = JSONArray.fromObject(m);
System.out.println(j);
net.sf.json.JSONArray jsonArray = net.sf.json.JSONArray.fromObject(map);
boolean[] boolArray = new boolean[]{true,false,true};
JSONArray jsonArray1 = JSONArray.fromObject( boolArray );
System.out.println( jsonArray1 );
System.out.println(jsonArray.toString());

将json格式的数据写入文件

将已有的json格式文件写入文件和其他的Java写文件并没有太大的区别,但为了做到有格式的将json对象写出到文件中,是需要参考数据结构中的括号匹配问题的。这里参考了CSDN的博客,感谢作者。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
public void writeToJson(String filePath,JSONArray object) throws IOException
{
File file = new File(filePath);
char [] stack = new char[1024];
int top=-1;
String string = object.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("\n"+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--;
sb.append(charArray[i] + "\n");
for (int j = 0; j <= top; j++) {
sb.append("\t");
}
continue;
}
}
if (',' == c) {
sb.append(charArray[i] + "");
for (int j = 0; j <= top; j++) {
sb.append("");
}
continue;
}
sb.append(c);
}
Writer write = new FileWriter(file);
write.write(sb.toString());
write.flush();
write.close();
}

one more thing

在将json格式的数据写出到文件的时候,可能需要写出”号来,在控制台输出的时候,很多人都知道使用转意符,即System.out.println(“/“”); ,不过在尝试写入到文件的时候,发现这么搞行不通,输出到文件的时候还是会有/,这该怎么办呢?
突发奇想,在需要输出的String的基础上再包一层new String(string)消化掉转意符。真的成功了!有时候,真的需要一点灵感~

CATALOG
  1. 1. Json
    1. 1.1. Json是什么
    2. 1.2. Json语法规则
  2. 2. Java写入Json格式数据到.json格式文件
    1. 2.1. 生成json格式数据
    2. 2.2. 将json格式的数据写入文件
  3. 3. one more thing