个人对json的一些简单理解「建议收藏」

个人对json的一些简单理解「建议收藏」在最近的学习中,查阅了很多资料,了解了一些关于json的基本知识,下面做一个简单的总结:json是什么没有.json结尾的这种文件,json(JavaScriptObjectNotation)是一种简单的数据交换格式,在此之前我也不知道这个东西其实没有想象的那么抽象,看看后面的例子会更清晰json中的数据结构json中只有两种数据基本结构,一种是MAP,或者叫对象,另一种是Ar…

大家好,又见面了,我是你们的朋友全栈君。

在最近的学习中,查阅了很多资料,了解了一些关于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账号...

(0)


相关推荐

  • DynamnicQuery for BAQ

    DynamnicQuery for BAQ文章转自:https://pastebin.com/9CsF6uEC//DynamnicQueryforBAQ    Epicor.Mfg.Core.SessionepiSession=default(Epicor.Mfg.Core.Session);    epiSession=(Epicor.Mfg.Core.Session)POEntryFor

  • CentOS安装最新Git

    CentOS安装最新Git

  • 极光漏洞,”极光”ie漏洞,微软发布2010年第一个IE 0day漏洞“极光”警告、最新官方补丁和解决办法

    极光漏洞,”极光”ie漏洞,微软发布2010年第一个IE 0day漏洞“极光”警告、最新官方补丁和解决办法微软2010年1月14日晚发布公告称,黑客在最近的针对Google、Adobe以及其他公司的攻击中利用了IE零日漏洞。远程代码执行漏洞影响到各Windows版本上运行的近乎全部的IE版本。关键字:极光

  • 西数移动硬盘不识别(移动硬盘怎么用)

    移动硬盘作为便携式存储器,很多用户都会在自己的电脑上安装。但最近有网友却反馈说自己的win10ltsb系统电脑出现了西数移动硬盘无法识别的情况,该怎么处理呢?下面本文就为大家整理了关于win10ltsb西数移动硬盘无法识别的具体解决措施,一起往下看吧。解决措施如下:1、首先打开计算机,在【此电脑】上鼠标右键,选择【管理】。2、这样,就进入了计算机管理界面。如下图,选择【磁盘管理】选项。3、在磁盘管理界面可以看到上方列出了所有内置磁盘和插入的磁盘,资源管理器中无法读取的磁盘也在..

  • SPI 协议简介

    SPI 协议简介1.SPI协议SPI协议是由摩托罗拉公司提出的通讯协议(SerialPeripheralInterface),即串行外围设备接口,是一种高速全双工的通信总线。它被广泛地使用在ADC、LCD等设备与MCU间,要求通讯速率较高的场合。1.1SPI物理层SPI通讯设备之间的常用连接方式:SPI通讯使用3条总线及片选线,3条总线分别为SCK、MOSI、MISO,片选线为SS,它们的作用介绍如下:(1)SS(SlaveSelect):从设备选…

  • unicodeDecodeerror(python编译集成可执行程序)

    错误如下:autoninja-Cout/Releasechrome”D:\dev\depot_tools\ninja.exe”-Cout/Releasechrome-j10ninja:Enteringdirectory`out/Release'[5/25580]ACTION//chrome/browser/resources/tab_search:build(//build/toolchain/win:win_clang_x64)FAILED:gen/chrome/

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号