JAVA解析JSON数据

1.什么是JSON? (http://www.json.org/

JSON (JavaScript Object Notation) is a lightweight data-interchange format. It is easy for humans to read and write. It is easy for machines to parse and generate. It is based on a subset of the JavaScript Programming LanguageStandard ECMA-262 3rd Edition - December 1999. JSON is a text format that is completely language independent but uses conventions that are familiar to programmers of the C-family of languages, including C, C++, C#, Java, JavaScript, Perl, Python, and many others. These properties make JSON an ideal data-interchange language.

image

image

(图片来自:http://www.cnblogs.com/xiaoluo501395377/p/3446605.html

 

2.Json数据类型

2-1.json对象

image

2-2.json数组

image

 

ps:JSONObject与JSONArray的区别

image(JSON数组)

image(JSON数组)

 

3.解析JSON数据(小编使用的GSON进行json数据的解析)

3-1 【JSONObject的解析】

下面是一个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

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

{

    "resultcode""200",

    "reason""successed!",

    "result": {

        "sk": {

            "temp""24",

            "wind_direction""西南风",

            "wind_strength""2级",

            "humidity""51%",

            "time""10:11"

        },

        "today": {

            "temperature""16℃~27℃",

            "weather""阴转多云",

            "weather_id": {

                "fa""02",

                "fb""01"

            },

            "wind""西南风3-4 级",

            "week""星期四",

            "city""滨州",

            "date_y""2015年06月04日",

            "dressing_index""舒适",

            "dressing_advice""建议着长袖T恤、衬衫加单裤等服装。年老体弱者宜着针织长袖衬衫、马甲和长裤。",

            "uv_index""最弱",

            "comfort_index""",

            "wash_index""较适宜",

            "travel_index""",

            "exercise_index""较适宜",

            "drying_index"""

        },

        "future": [

            {

                "temperature""16℃~27℃",

                "weather""阴转多云",

                "weather_id": {

                    "fa""02",

                    "fb""01"

                },

                "wind""西南风3-4 级",

                "week""星期四",

                "date""20150604"

            },

            {

                "temperature""20℃~32℃",

                "weather""多云转晴",

                "weather_id": {

                    "fa""01",

                    "fb""00"

                },

                "wind""西风3-4 级",

                "week""星期五",

                "date""20150605"

            },

            {

                "temperature""23℃~35℃",

                "weather""多云转阴",

                "weather_id": {

                    "fa""01",

                    "fb""02"

                },

                "wind""西南风3-4 级",

                "week""星期六",

                "date""20150606"

            },

            {

                "temperature""20℃~33℃",

                "weather""多云",

                "weather_id": {

                    "fa""01",

                    "fb""01"

                },

                "wind""北风微风",

                "week""星期日",

                "date""20150607"

            },

            {

                "temperature""22℃~34℃",

                "weather""多云",

                "weather_id": {

                    "fa""01",

                    "fb""01"

                },

                "wind""西南风3-4 级",

                "week""星期一",

                "date""20150608"

            },

            {

                "temperature""22℃~33℃",

                "weather""阴",

                "weather_id": {

                    "fa""02",

                    "fb""02"

                },

                "wind""西南风3-4 级",

                "week""星期二",

                "date""20150609"

            },

            {

                "temperature""22℃~33℃",

                "weather""多云",

                "weather_id": {

                    "fa""01",

                    "fb""01"

                },

                "wind""南风3-4 级",

                "week""星期三",

                "date""20150610"

            }

        ]

    },

    "error_code"0

}

我们进行解析(解析一部分):

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

package cn.edu.bzu.json;

 

import java.io.FileNotFoundException;

import java.io.FileReader;

 

import com.google.gson.JsonArray;

import com.google.gson.JsonIOException;

import com.google.gson.JsonObject;

import com.google.gson.JsonParser;

import com.google.gson.JsonSyntaxException;

 

public class Read {

    public static void main(String args[]){

        JsonParser parse =new JsonParser();  //创建json解析器

        try {

            JsonObject json=(JsonObject) parse.parse(new FileReader("weather.json"));  //创建jsonObject对象

            System.out.println("resultcode:"+json.get("resultcode").getAsInt());  //将json数据转为为int型的数据

            System.out.println("reason:"+json.get("reason").getAsString());     //将json数据转为为String型的数据

             

            JsonObject result=json.get("result").getAsJsonObject();

            JsonObject today=result.get("today").getAsJsonObject();

            System.out.println("temperature:"+today.get("temperature").getAsString());

            System.out.println("weather:"+today.get("weather").getAsString());

             

        catch (JsonIOException e) {

            e.printStackTrace();

        catch (JsonSyntaxException e) {

            e.printStackTrace();

        catch (FileNotFoundException e) {

            e.printStackTrace();

        }

    }

}

输出结果:

image

 

3-2 【JSONArray的解析】

下面是一个json文件

复制代码

{
    "cat":"it",
    "language":[
        {"id":1,"ide":"eclipse","name":Java},
        {"id":2,"ide":"XCode","name":"Swift"},
        {"id":3,"ide":"Visual Stdio","name":"C#"}     
    ],
    "pop":true
}

复制代码

我们进行解析:

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

package cn.edu.bzu.json;

 

import java.io.FileNotFoundException;

import java.io.FileReader;

 

import com.google.gson.JsonArray;

import com.google.gson.JsonIOException;

import com.google.gson.JsonObject;

import com.google.gson.JsonParser;

import com.google.gson.JsonSyntaxException;

 

public class ReadJSON {

    public static void main(String args[]){

        try {

             

            JsonParser parser=new JsonParser();  //创建JSON解析器

            JsonObject object=(JsonObject) parser.parse(new FileReader("test.json"));  //创建JsonObject对象

            System.out.println("cat="+object.get("cat").getAsString()); //将json数据转为为String型的数据

            System.out.println("pop="+object.get("pop").getAsBoolean()); //将json数据转为为boolean型的数据

             

            JsonArray array=object.get("language").getAsJsonArray();    //得到为json的数组

            for(int i=0;i<array.size();i++){

                System.out.println("---------------");

                JsonObject subObject=array.get(i).getAsJsonObject();

                System.out.println("id="+subObject.get("id").getAsInt());

                System.out.println("name="+subObject.get("name").getAsString());

                System.out.println("ide="+subObject.get("ide").getAsString());

            }

             

        catch (JsonIOException e) {

            e.printStackTrace();

        catch (JsonSyntaxException e) {

            e.printStackTrace();

        catch (FileNotFoundException e) {

            e.printStackTrace();

        }

    }

}

输出结果:

image

 

3-3 【分析】

我们通过Gson进行解析,所以在使用前需要导入Gson.jar

解析json数据时,

1.需要进行创建Gson解析器

2.创建JSONObject对象

3.将json数据转为为相应的数据

 

4.源代码下载:

https://github.com/monsterLin/TestReadJSON

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值