首先,准备好 res/raw 下面的 user.json文件
(可以是数组,也可以是单个对象,复杂的话就是彼此嵌套)
<span style="font-size:18px;"><strong>[
{
"firstName": "DAI",
"lastName": "BOBO",
"email": "bobo@moliying.com"
},
{
"firstName": "XIN",
"lastName": "JIANJIAN",
"email": "jianjian@moliying.com"
}
]</strong></span>
接着, 创建好 对象 User
<span style="font-size:14px;">public class User {
private String firstName;
private String lastName;
private String email;
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public String getEmail() {
return email;
}
@Override
public String toString() {
return "User{" +
"firstName='" + firstName + '\'' +
", lastName='" + lastName + '\'' +
", email='" + email + '\'' +
'}';
}
public void setEmail(String email) {
this.email = email;
}
}</span>
然后,Activity 中 开始解析
<span style="font-size:14px;">public class JSONActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_json);
}
public void jsonSimpleClick(View view){
ArrayList<User> list = parseJSON();
System.out.println(list);
}
private ArrayList<User> parseJSON() {
InputStream in = getResources().openRawResource(R.raw.user);
JsonReader jsonReader = new JsonReader(new InputStreamReader(in));
ArrayList<User> list = new ArrayList<>(); // 准备好 接收对象的 容器
try {
jsonReader.beginArray(); //因为是数组,所以 先beginArray()。如果是对象,就先beginObject()。
while (jsonReader.hasNext()){
User user = getUser(jsonReader); //抽出来到下面称为一个内部方法 ,以免 层级太深 影响代码可读性
list.add(user); //上一行获得 对象 , 添加到list中
}
jsonReader.endArray(); //类似 作用域的 括号 要和 beginArray/beginObject 成对出现
} catch (IOException e) {
e.printStackTrace();
}
return list;
}
@NonNull
private User getUser(JsonReader jsonReader) throws IOException {
jsonReader.beginObject(); //开始 数组中 单个 对象的 解析 下面要有endObject() 成对呼应出现
User user = new User();
while(jsonReader.hasNext()){
String name = jsonReader.nextName(); //得到 “名称/值”对 中的 “名称”
if("firstName".equals(name)){ // 根据 “名称”, 对应 取“值”
user.setFirstName(jsonReader.nextString()); // 得到 “值”,给 对象 的 成员变量 赋值
}else if("lastName".equals(name)){
user.setLastName(jsonReader.nextString());
}else if("email".equals(name)){
user.setEmail(jsonReader.nextString());
}
}
jsonReader.endObject(); //结束解析对象
return user; // 赋值 & 解析 完成 得到完整对象 并 返回
}
}
</span>