-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathJSON
213 lines (186 loc) · 6.55 KB
/
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
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
package com.example.administrator.indicatorscroller;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.text.TextUtils;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import com.example.administrator.indicatorscroller.bean.Tensent;
import com.google.gson.Gson;
import com.google.gson.JsonObject;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import butterknife.BindView;
/**
* 每次做JSON有关的东西,都把自己搞的怀疑人生,需要注意的细节太多了
* 一个JSONObject 一个JSONArray,细节真的弄得我精神分裂!!
*/
public class FourthActivity extends AppCompatActivity {
private static final String TAG = "FourthActivity";
private TextView textView;
@BindView(R.id.button)
Button btn;
@BindView(R.id.button2)
Button btn2;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_four);
// 同一个TextView使用换行符,拼接多个字段
textView = findViewById(R.id.textView);
textView.setText(createJSONObject() + "\n");
textView.append(createJSONArray() + "\n\n");
textView.append(parseJSONObject(createJSONObject()) + "\n");
textView.append(parseJSONArray(createJSONArray()) + "\n\n");
}
/**
* ①获取到JSON之后,进行反序列化,需创建与JSON数据中各个key值对应的实体类
* ②fromJson接收的第一个参数string,要求是JSONObject,而不能是JSONArray
* 否则报错异常 “IllegalStateException: Expected BEGIN_OBJECT but was BEGIN_ARRAY ”
* ③测试时如果直接拼接JSON格式数据,需放入“ ”双引号之下,这样编译器会自动在对应的位置上添加好换行符
* 最重要:到一个JSON格式验证网站验证,确保原始JSON格式无误。容易忽略的就是最后一个字符value值加上了逗号,
* 否则报错异常 “com.google.gson.stream.MalformedJsonException”
* 多余的空格都会引发异常,所以获取到的JSON数据一定要进行检查,确保无误!!!!!!!!!!!
* @param view
*/
public void json_to_object_gson(View view) {
String str = " {\n" +
" \"id\": 13,\n" +
" \"node_id\": \"MD\",\n" +
" \"name\": \"boy\",\n" +
" \"full_name\": \"oct\",\n" +
" \"is\": false\n" +
" } \n";
Gson gson = new Gson();
Tensent tensent = gson.fromJson(str, Tensent.class);
String json = gson.toJson(tensent);
textView.append(json);
}
/**
* Gson最重要两个方法
* 一个是fromJson()-反序列化
* 另一个是toJson()-序列化
* @param view
*/
public void object_to_json_gson(View view) {
}
/**
* 创建JSON对象
* JsonObject —— com.google.gson.JsonObject
* JSONObject —— org.json.JSONObject
* @return
*/
private JSONObject createJSONObject() {
JsonObject jsonObject = new JsonObject(); // com.google.gson.JsonObject
JSONObject object = new JSONObject(); // org.json.JSONObject
try {
object.put("name", "zhangsan");
object.put("age", "23");
} catch (JSONException e) {
e.printStackTrace();
}
return object;
}
/**
* 创建JSON数组
* 数组中可以加入很多变量,但是如果需要对这个数组进行for循环取值
* 就必须保证里面只有JSONObject,而不能有任何的牛鬼蛇神
* @return
*/
private String createJSONArray() {
JSONArray jsonArray = new JSONArray();
// jsonArray.put("wanwu"); Value wanwu at 0 of type java.lang.String cannot be converted to JSONObject
// jsonArray.put("lisi");
JSONObject object1 = new JSONObject();
JSONObject object2 = new JSONObject();
try {
object1.put("name", "wanwu");
object1.put("age", "26");
object2.put("name", "lisi");
object2.put("age", "24");
} catch (JSONException e) {
e.printStackTrace();
}
jsonArray.put(object1);
jsonArray.put(object2);
return jsonArray.toString();
}
/**
* 解析单个JSONObject
* @param jsonObject
* @return
*/
private String parseJSONObject(JSONObject jsonObject) {
// 定义一个空字符串用以拼接解析出来的json value
String ret = " ";
String name = jsonObject.optString("name");
String age = jsonObject.optString("age");
if (!TextUtils.isEmpty("name")) {
ret += "name:" + name + " ";
}
if (!TextUtils.isEmpty("age")) {
ret += "age:" + age + " ";
}
return ret;
}
/**
* 解析JSONArray
* @param array
* @return
*/
private String parseJSONArray(String array) {
String ret = " ";
try {
JSONArray jsonArray = new JSONArray(array);
for (int i = 0; i < jsonArray.length(); i++) {
// 注意数组中都要求是JSONObject 而不能是单个的字符串 否则不能转换为JSONObject
// 会报warning:Value wanwu at 0 of type java.lang.String cannot be converted to JSONObject
JSONObject object = jsonArray.getJSONObject(i);
ret += parseJSONObject(object);
}
} catch (JSONException e) {
e.printStackTrace();
}
return ret;
}
}
// 与JSON key值一一对应建立起来的是实体类
public class Tensent {
private int id;
private String node_id;
private String name;
private String full_name;
private boolean is;
public boolean isIs() {
return is;
}
public void setIs(boolean is) {
this.is = is;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getNode_id() {
return node_id;
}
public void setNode_id(String node_id) {
this.node_id = node_id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getFull_name() {
return full_name;
}
public void setFull_name(String full_name) {
this.full_name = full_name;
}
}