android json教程,Android之JSON解析

编写项目,包含一个Activity。Activity页面效果如下图所示。点击按钮“解析文件1”后解析Json文件json_single并将结果显示在红色框体中,点击按钮“解析文件2”后解析Json文件json_multiple并将结果显示在红色框体中(有多条数据,建议使用列表控件ListView进行信息展示)。

android json教程,Android之JSON解析_第1张图片

先写xml布局文件

1

2

3 android:layout_width="match_parent"

4 android:layout_height="match_parent"

5 android:orientation="vertical">

6

7

8 android:id="@+id/button50"

9 android:layout_width="match_parent"

10 android:layout_height="wrap_content"

11

12 android:text="解析文件1" />

13

14 android:id="@+id/button51"

15 android:layout_width="match_parent"

16 android:layout_height="wrap_content"

17 android:text="解析文件2" />

18

19 android:layout_width="match_parent"

20 android:layout_height="wrap_content"

21 android:id="@+id/LS"/>

22

将我们的JSON文件导入到res的raw下,如果没有raw,右键Andrriod Resource Directory在Resource type中输入raw,ok

json_single.json :

1 {

2 "name":"王小二",

3 "age":25,

4 "birthday":"1990-01-01",

5 "school":"师大",

6 "car":"比亚迪",

7 "house":"宿舍",

8 }

json_multiple.json :

1 [{

2 "name":"王小二",

3 "age":25,

4 "birthday":"1990-01-01",

5 "school":"师大",

6 "car":"比亚迪",

7 "house":"宿舍",

8 },

9 {

10 "name":"李三",

11 "age":30,

12 "birthday":"1987-04-13",

13 "school":"清华",

14 "car":"大众速腾",

15 "house":"公寓",

16 },

17 {

18 "name":"张盼盼",

19 "age":17,

20 "birthday":"1995-07-02",

21 "school":"北大",

22 "car":"宝马7系",

23 "house":"别墅",

24 }]

思路很简单,就是读取到json文件然后解析最后显示出来。

Mainactiviyt :

1 package com.example.app;

2

3 import androidx.annotation.RequiresApi;

4 import androidx.appcompat.app.AppCompatActivity;

5

6 import android.Manifest;

7 import android.annotation.SuppressLint;

8 import android.os.Build;

9 import android.os.Bundle;

10 import android.view.View;

11 import android.view.ViewGroup;

12 import android.view.LayoutInflater;

13

14 import android.widget.*;

15 import org.json.*;

16 import org.json.JSONException;

17 import org.json.JSONObject;

18 import java.io.BufferedReader;

19 import java.io.FileOutputStream;

20 import java.io.FileInputStream;

21 import java.io.IOException;

22 import java.io.InputStream;

23 import java.io.InputStreamReader;

24 import java.security.Permission;

25 import java.security.Permissions;

26 import java.io.UnsupportedEncodingException;

27

28

29 public class MainActivity extends AppCompatActivity {

30

31 private static String[] Json; //用来存储的数组

32 private ListView LS;

33 private Button B1;

34 private Button B2;

35 private int a = 0;

36

37 @Override

38 protected void onCreate(Bundle savedInstanceState) {

39 super.onCreate(savedInstanceState);

40 setContentView(R.layout.homework_8_2);

41

42 B1 = (Button) findViewById(R.id.button50);

43 B2 = (Button) findViewById(R.id.button51);

44 LS = (ListView) findViewById(R.id.LS); //实例化按钮B1,B2,和listview

45 B1.setOnClickListener(new View.OnClickListener() {//监听B1

46 @Override

47 public void onClick(View v) {

48 //Json = new String[100];

49 JsonDataToString1(); //读取json文件

50 }

51 });

52 B2.setOnClickListener(new View.OnClickListener() {//监听B2

53 @Override

54 public void onClick(View v) {

55 //Json = new String[100];

56 a = 0; //当B2被点击,变量a就会重置为0

57 JsonDataToString2(); //读取json文件

58 }

59 });

60 }

61 @SuppressLint("ResourceType")

62 private void JsonDataToString1(){

63

64 InputStreamReader inputStreamReader = null;

65 String jsonData = "";

66 try {

67 inputStreamReader = new InputStreamReader(getResources().openRawResource(R.raw.json_single),"UTF-8");//读取

68 BufferedReader bufferedReader = new BufferedReader(inputStreamReader);

69 String line;

70 StringBuilder srt = new StringBuilder();

71 while((line = bufferedReader.readLine()) != null){

72 srt.append(line);

73 }

74 inputStreamReader.close();

75 bufferedReader.close();

76 jsonData = srt.toString(); //以上就是读取json文件,转化成string

77 }catch (UnsupportedOperationException e){

78 e.printStackTrace();

79 }catch (IOException e){

80 e.printStackTrace();

81 }

82

83 if (jsonData != ""){

84 getDataFromData1(jsonData); //进一步分析字符串,获取json内容

85 }else {

86 Toast.makeText(MainActivity.this,"error",Toast.LENGTH_SHORT).show();

87 }

88 }

89

90 private void getDataFromData1(String jsonData){

91 try{

92

93 JSONObject jsonObject = new JSONObject(jsonData);

94 String name = jsonObject.getString("name");

95 String age = jsonObject.getString("age");

96 String birthday = jsonObject.getString("birthday");

97 String school = jsonObject.getString("school");

98 String car = jsonObject.getString("car");

99 String house = jsonObject.getString("house"); //获取json内容

100 Json = new String[]{

101 "name:"+name,"age:"+age,"birthday:"+birthday,"school:"+school,"car:"+car,"house:"+house

102 };//将json内容存进数组中

103 ArrayAdapter adapter = new ArrayAdapter(this,android.R.layout.simple_list_item_1,R.id.LS);//新建并配置ArrayAapeter

104 MyBaseAdapter mAdapter = new MyBaseAdapter();

105 LS.setAdapter(mAdapter);

106 }catch (JSONException e){

107 e.printStackTrace();

108 }

109 }

110

111 @SuppressLint("ResourceType")

112 private void JsonDataToString2(){

113

114 InputStreamReader inputStreamReader = null;

115 String jsonData = "";

116 try {

117 inputStreamReader = new InputStreamReader(getResources().openRawResource(R.raw.json_multiple),"UTF-8");//读取

118 BufferedReader bufferedReader = new BufferedReader(inputStreamReader);

119 String line;

120 StringBuilder srt = new StringBuilder();

121 while((line = bufferedReader.readLine()) != null){

122 srt.append(line);

123 }

124 inputStreamReader.close();

125 bufferedReader.close();

126 jsonData = srt.toString();//以上就是读取json文件,转化成string

127 }catch (UnsupportedOperationException e){

128 e.printStackTrace();

129 }catch (IOException e){

130 e.printStackTrace();

131 }

132

133 if (jsonData != ""){

134 getDataFromData2(jsonData); //进一步分析字符串,获取json内容

135 }else {

136 Toast.makeText(MainActivity.this,"error",Toast.LENGTH_SHORT).show();

137 }

138 }

139

140 private void getDataFromData2(String jsonData){

141 try{

142 Json = new String[100]; //这里必须初始化Json数组,否则点击完解析一后Json数组的length只有6,会因空间不足而程序崩溃

143 JSONArray jsonArray = new JSONArray(jsonData);

144 //String[] bbk = new String[]{};

145 for (int i=0;i

146 JSONObject jsonObject = jsonArray.getJSONObject(i);

147 String name = jsonObject.getString("name");

148 String age = jsonObject.getString("age");

149 String birthday = jsonObject.getString("birthday");

150 String school = jsonObject.getString("school");

151 String car = jsonObject.getString("car");

152 String house = jsonObject.getString("house");//解析出json的内容

153 Json[a] = "name:"+name; //为了将数据循环存储进Json数组中,用了一个变量a来控制

154 Json[a+1] = "age:"+age;

155 Json[a+2] = "birthday:"+birthday;

156 Json[a+3] = "school:"+school;

157 Json[a+4] = "car:"+car;

158 Json[a+5] = "house:"+house; //因为发现数据有六项且key值都一样,就正好用一个变量a来表示数组的下标

159 a = a+6; //如果a不重置为0,那么a会不停的往上加,直到超出数组下标溢出,导致程序崩溃

160 }

161 ArrayAdapter adapter = new ArrayAdapter(this,android.R.layout.simple_list_item_1,R.id.LS);//新建并配置ArrayAapeter

162 MyBaseAdapter mAdapter = new MyBaseAdapter();

163 LS.setAdapter(mAdapter);

164 }catch (JSONException e){

165 e.printStackTrace();

166 }

167 }

168

169 class MyBaseAdapter extends BaseAdapter{ //这里不解释

170

171 @Override

172 public int getCount() {

173 return Json.length;

174 }

175 @Override

176 public Object getItem(int position) {

177 return null;

178 }

179 @Override

180 public long getItemId(int position) {

181 return 0;

182 }

183 @Override

184 public View getView(int position, View convertView, ViewGroup parent) {

185 ViewHolder holder;

186 if(convertView == null){

187 convertView = LayoutInflater.from(getApplicationContext()).inflate(R.layout.homework_five_2,parent,false);

188 holder = new ViewHolder();

189 holder.mTextView = (TextView) convertView.findViewById(R.id.tv);

190 convertView.setTag(holder);

191 }else {

192 holder = (ViewHolder) convertView.getTag();

193 }

194 holder.mTextView.setText(Json[position]);

195 return convertView;

196 }

197 class ViewHolder {

198 TextView mTextView;

199 }

200 }

201

202 }

我们的布局文件用的listview,所以我们需要再写一个布局文件提供格式

1

2

3 xmlns:app="http://schemas.android.com/apk/res-auto"

4 android:layout_width="match_parent"

5 android:layout_height="match_parent">

6

7

8 android:id="@+id/tv"

9 android:layout_width="match_parent"

10 android:layout_height="match_parent"/>

11

12

结果如图

android json教程,Android之JSON解析_第2张图片

android json教程,Android之JSON解析_第3张图片

最后,赶时间写出来的,写的很烂,等过几天精简一下代码,等待更新哦!

来源:https://www.cnblogs.com/rebirther/p/12888087.html

你可能感兴趣的:(android,json教程)