大家好,又见面了,我是你们的朋友全栈君。
在最近的学习中,查阅了很多资料,了解了一些关于json的基本知识,下面做一个简单的总结:
json是什么
没有.json结尾的这种文件,json(
JavaScript Object Notation)是一种简单的数据交换格式,在此之前我也不知道这个东西其实没有想象的那么抽象,看看后面的例子会更清晰
json中的数据结构
json中只有两种数据基本结构,一种是MAP,或者叫对象,另一种是Array
1.Map
类似与java中的Map,这里是以{开始,以}结束,内部object内容是键值对的形势,key:value,中间是:号隔开,不同的object之间用逗号隔开 比如:{name:hujie , age:21} 官方给的图解:(https://www.json.org/)
2.Array
这个就类似于数组吧,所以很多时候我们都把json叫做就json数组, 这里是以[开始的,以]结束的,中间的value用逗号隔开 比如:[value1 , value2 , value3]
官方的给的图解是:
json数组中的value可以是很多种数据类型的值,官方给了如下图解
这里的string,number等等我想是不需要多解释了,谁实话,这些具体的定时,我能理解,可是没法说出来。
知识点:
1.json并不难理解,简单点理解就是一种数据交换的格式
2.json只有两中结构,一种是object另一种是array,并且两者可以相互嵌套,{}是对象,[]是数组
json与JavaScript的转换
在javaScript中有一个动态脚本执行函数:eval(),这是一个javaScript的全局对象 eval()函数只能接受原生态的字符串作为参数,如果不是字符串,则会原样返回,否则会返回字符串的计算结果(前提是得有结果,没有结果返回null) eval()案例:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<script language=javascript type=text/javascript>
alert(eval(x=
10
;y=
10
;x*y;));
//100,当做js脚本执行
alert(eval(
2
+
3
));
//5
alert(eval(x+
10
));
//20了
var str={};
//花括号内没属性时
alert(eval(
'('
+ str +
')'
));
//弹出:[object Object]
alert(eval(str));
//弹出:undefined
str={name:
'hj'
};
//花括号内有一个属性
alert(typeof eval(
'('
+ str +
')'
));
//弹出:object,以对象方式返回
alert(eval(str));
//弹出:hj
alert(eval(
'('
+ str +
')'
).name);
//弹出:hj
alert(eval(str).name);
//弹出:undefined
str={name:
'hj'
,age:
21
};
//花括号内有多个属性时
alert(eval(
'('
+ str +
')'
));
//object对象
alert(eval(
'('
+ str +
')'
).name);
//hj
alert(eval(
'('
+ str +
')'
).age);
//21
//alert(eval(str));//运行时会出错,多个属性时不用小括号运行出错
//花括号{}是用来声明一个对象的,如果需要引用这个对象,那么我们必须加上(),这样才可以,因是声明语句只能执行,并不能够返回
//用()括起来的目的是将声明语句转换成表达式,这样就可以计算表达式的值,并返回
</script>
这里指的注意的是,eval执行的脚本,生成的变量,是属于调用eval的那个作用域的
1
2
3
4
5
6
7
8
9
<script language=javascript type=text/javascript>
eval(var str =
'全局'
;);
function test(){
eval(var str =
'局部'
;);
alert(str);
//局部
}
test();
alert(str);
//全局
</script>
下面讲一下json串和javaScript对象的相互转换吧 json串转换成js对象:
1
2
3
4
5
6
<script language=javascript type=text/javascript>
var jsonpeople = [{
'name'
:
'hj'
,
'age'
:
21
},{
'name'
:
'darkrake'
,
'age'
:
21
}];
var jspeople = eval(
'('
+jsonpeople+
')'
);
alert(jspeople[
0
].name+:+jspeople[
0
].age);
alert(jspeople[
1
].name+:+jspeople[
1
].age);
</script>
json与XML的格式对比
简单对比:
XML:
1
2
3
4
5
6
7
8
9
10
<peoples>
<people>
<name>hj</name>
21
</age>
</people>
<people>
<name>darkrake</name>
21
</age>
</people>
</peoples>
对应的json串格式:
1
2
3
4
5
6
{
peoples:{
people:[{
'name'
:
'hj'
,
'age'
:
21
},
{
'name'
:
'darkrake'
,
'age'
:
21
}]
}
}
来一个稍微复杂一点的吧,多层嵌套的:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<province>
<provincename>安徽</provincename>
<city>
<cityname>六安</cityname>
<town>金安区</town>
<town>舒城</town>
</city>
<city>
<cityname>合肥</cityname>
<town>肥东</town>
<town>肥西</town>
</city></address></province>
<province>
<provincename>北京</provincename>
<city>
<cityname>北京</cityname>
<town>东城区</town>
<town>海淀区</town>
</city>
</province>
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
{
address: {
Province: [
{
ProvinceName: 安徽,
City: [
{
CityName: 六安,
town: [
金安区,
舒城
]
},
{
CityName: 合肥,
town: [
肥东,
肥西
]
}
]
},
{
ProvinceName: 北京,
City: {
CityName: 北京,
town: [
东城区,
海淀区
]
}
}
]
}
}
json in Java API常用的类以及方法
JSONObject类(往往与JSONArray结合起来用,最常用了)
案例:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
package
javaJsonAPI;
import
org.json.JSONObject;
public
class
JsonArrayTest {
/*
* 表示我没有在官网https://www.json.org/里面找到json的jar包 ,这里我的解决 方案是下载官网提供的源文件*.java
* 项目里面建了一个名为org.json的package,把源文件都导入进去了,其实和在classpath中导入jar包没有区别
*/
public
static
void
main(String args[]) {
JSONObject jsonObject =
new
JSONObject({
'name'
:
'DarkRake'
,
'age'
:
21
});
System.out.println(jsonObject.get(name));
System.out.println(jsonObject.get(age));
}
}
JSONArray类 案例:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
package
javaJsonAPI;
import
org.json.JSONArray;
public
class
JsonArrayTest {
/*
* 表示我没有在官网https://www.json.org/里面找到json的jar包 ,这里我的解决 方案是下载官网提供的源文件*.java
* 项目里面建了一个名为org.json的package,把源文件都导入进去了,其实和在classpath中导入jar包没有区别
*/
public
static
void
main(String args[]) {
String strs[] = { one, two, three };
JSONArray myjson =
new
JSONArray(strs);
for
(
int
i =
0
; i < myjson.length(); i++) {
System.out.println(myjson.getString(i));
}
}
}
进阶:JSONObject与JSONArray类结合使用
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
package
javaJsonAPI;
import
org.json.JSONObject;
public
class
JsonArrayTest {
/*
* 表示我没有在官网https://www.json.org/里面找到json的jar包 ,这里我的解决 方案是下载官网提供的源文件*.java
* 项目里面建了一个名为org.json的package,把源文件都导入进去了,其实和在classpath中导入jar包没有区别
*/
public
static
void
main(String args[]) {
String str = {address: {Province: {ProvinceName: 安徽,City: [{CityName: 六安, own: [金安区,舒城] },{CityName: 合肥, own: [肥东,肥西]}]}}};
JSONObject jo =
new
JSONObject(str);
String ProvinceName = jo.getJSONObject(address)
//
.getJSONObject(Province).get(ProvinceName).toString();
//
System.out.println(ProvinceName);
String cityName = jo.getJSONObject(address).getJSONObject(Province)
//
.getJSONArray(City).getJSONObject(
0
).get(CityName)
//
.toString();
System.out.println( + cityName);
String town1 = jo.getJSONObject(address).getJSONObject(Province)
//
.getJSONArray(City).getJSONObject(
0
).getJSONArray(town)
//
.get(
0
).toString();
System.out.println( + town1);
String town2 = jo.getJSONObject(address).getJSONObject(Province)
//
.getJSONArray(City).getJSONObject(
0
).getJSONArray(town)
//
.get(
1
).toString();
System.out.println( + town2);
}
}
JSONStringer
->快速构建一个JSON串,并可以写入文件中去
基本方法介绍:
JSONStringer是JSONWriter的子类;
JSONStringer一般通过object().key().value().key().value().endObject()进行构造;
JSONString ():构造函数
object()表明开始一个对象,即添加{ ;
endObject()表明结束一个对象,即添加 } ;
array()表明开始一个数组,即添加一个 [ ;
endArray()表明结束一个数组,即添加一个 ] ;
key()表示添加一个key;
value()表示添加一个value;
注意:通过该方法,Object之间的“,”以及Array数组各个value之间的“,”都是自动添加的
简单案例:
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
package
javaJsonAPI;
import
org.json.JSONStringer;
public
class
JsonArrayTest {
/*
* 表示我没有在官网https://www.json.org/里面找到json的jar包 ,这里我的解决 方案是下载官网提供的源文件*.java
* 项目里面建了一个名为org.json的package,把源文件都导入进去了,其实和在classpath中导入jar包没有区别
*/
public
static
void
main(String args[]) {
JSONStringer js =
new
JSONStringer();
js.array();
js.object();
js.key(name);
js.value(hj);
js.key(age);
js.value(
21
);
js.endObject();
js.object();
js.key(name);
js.value(darkrake);
js.key(age);
js.value(
21
);
js.endObject();
js.endArray();
System.out.println(js.toString());
}
}
小综合案例:
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
package
javaJsonAPI;
import
org.json.JSONArray;
import
org.json.JSONObject;
import
org.json.JSONStringer;
public
class
JsonArrayTest {
/*
* 表示我没有在官网https://www.json.org/里面找到json的jar包 ,这里我的解决 方案是下载官网提供的源文件*.java
* 项目里面建了一个名为org.json的package,把源文件都导入进去了,其实和在classpath中导入jar包没有区别
*/
public
static
void
main(String args[]) {
JSONStringer js =
new
JSONStringer();
// 创建book1
JSONObject book1 =
new
JSONObject();
book1.put(name, Java);
JSONArray ja1 =
new
JSONArray();
String str1[] = { LiuWANJUN, XXX };
ja1.put(str1);
book1.put(author, ja1);
book1.put(price, ¥
108
);
// 创建book2
JSONObject book2 =
new
JSONObject();
book2.put(name, JavaScript);
JSONArray ja2 =
new
JSONArray();
String str2[] = { LiSongFeng, CaoLi };
ja2.put(str2);
book2.put(author, ja2);
book2.put(price, ¥
108
);
js.object();
js.key(Book);
js.array();
js.value(book1);
js.value(book2);
js.endArray();
js.endObject();
System.out.println(js.toString());
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
{
Book: [
{
author: [
[
LiuWANJUN,
XXX
]
],
price: ¥
108
,
name: Java
},
{
author: [
[
LiSongFeng,
CaoLi
]
],
price: ¥
108
,
name: JavaScript
}
]
}
转换成XML即为:
1
2
3
4
5
6
7
8
9
10
11
12
<book>
LiuWANJUN</author>
XXX</author>
<price>¥
108
</price>
<name>Java</name>
</book>
<book>
LiSongFeng</author>
CaoLi</author>
<price>¥
108
</price>
<name>JavaScript</name>
</book>
总结:
1.JSON是一种数据交换的格式,在web项目中具有着广泛的应用,尤其是AJAX一步加载数据,往往都是用json格式的数据,而不是传统的XML;
2.JSON只有两种结构,Object和Array
3.不知道我写的有没有错,我也是参考了别人的学习方案进行学习和理解的,下周有时间,抽空学习前段JSON的应用吧,这里写的主要是Java后台的操作
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/133145.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...