res/raw 下的 message.json 文件
<strong><span style="font-size:18px;">[
{
"id": 912345678901,
"text": "How do I read JSON on Android?",
"geo": null,
"user": {
"name": "android_newb",
"followers_count": 41
}
},
{
"id": 912345678902,
"text": "@android_newb just use android.util.JsonReader!",
"geo": [50.454722, -104.606667],
"user": {
"name": "jesse",
"followers_count": 2
}
}
]</span></strong>
message 类
<span style="font-size:14px;">public class Message {
private long id;
private String text;
private ArrayList<Double> geo;
private User2 user2;
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public String getText() {
return text;
}
public void setText(String text) {
this.text = text;
}
public ArrayList<Double> getGeo() {
return geo;
}
public void setGeo(ArrayList<Double> geo) {
this.geo = geo;
}
public User2 getUser2() {
return user2;
}
public void setUser2(User2 user2) {
this.user2 = user2;
}
@Override
public String toString() {
return "Message{" +
"id=" + id +
", text='" + text + '\'' +
", geo=" + geo +
", user2=" + user2 +
'}';
}
}</span>
User2 类
<span style="font-size:14px;">public class User2 {
private String name;
private int followers_count;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getFollowers_count() {
return followers_count;
}
public void setFollowers_count(int followers_count) {
this.followers_count = followers_count;
}
@Override
public String toString() {
return "User2{" +
"name='" + name + '\'' +
", followers_count=" + followers_count +
'}';
}
}</span>
<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();
while (jsonReader.hasNext()){
User user = getUser(jsonReader);
list.add(user);
}
jsonReader.endArray();
} catch (IOException e) {
e.printStackTrace();
}
return list;
}
@NonNull
private User getUser(JsonReader jsonReader) throws IOException {
jsonReader.beginObject();
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;
}
public void parseJSONClick(View view){
ArrayList<Message> messages = parseJSON2();
for (Message message : messages) {
Log.i("Message",message.toString());
}
}
private ArrayList parseJSON2() {
InputStream in = getResources().openRawResource(R.raw.message);
JsonReader jsonReader = new JsonReader(new InputStreamReader(in));
try {
return readMessageArray(jsonReader);
}finally {
try {
jsonReader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
/**
* 解析数组
* @param jsonReader
* @return
*/
private ArrayList<Message> readMessageArray(JsonReader jsonReader){
ArrayList<Message> messages = new ArrayList();
try {
jsonReader.beginArray();
while (jsonReader.hasNext()){
messages.add(readMessage(jsonReader));
}
jsonReader.endArray();
} catch (IOException e) {
e.printStackTrace();
}
return messages;
}
/**
* 解析一个对象
* @param jsonReader
* @return
*/
private Message readMessage(JsonReader jsonReader) {
Message m = null;
String name = null;
try {
jsonReader.beginObject();
m = new Message();
while (jsonReader.hasNext()){
name = jsonReader.nextName();
if("id".equals(name)){
m.setId(jsonReader.nextLong());
}else if("text".equals(name)){
m.setText(jsonReader.nextString());
}else if("geo".equals(name) && jsonReader.peek()!= JsonToken.NULL){
m.setGeo(readGeo(jsonReader));
}else if("user".equals(name)){
m.setUser2(readUser(jsonReader));
}else{
jsonReader.skipValue();
}
}
jsonReader.endObject();
} catch (IOException e) {
e.printStackTrace();
}
return m;
}
//解析一个User对象
private User2 readUser(JsonReader jsonReader) {
User2 user = new User2();
String name = null;
try {
jsonReader.beginObject();
while (jsonReader.hasNext()){
name = jsonReader.nextName();
if("name".equals(name)){
user.setName(jsonReader.nextString());
}else if("followers_count".equals(name)){
user.setFollowers_count(jsonReader.nextInt());
}else{
// jsonReader.skipValue();
}
}
jsonReader.endObject();
} catch (IOException e) {
e.printStackTrace();
}
return user;
}
/**
* 解析Geo
* @param jsonReader
* @return
*/
private ArrayList<Double> readGeo(JsonReader jsonReader) {
ArrayList<Double> geo = new ArrayList();
try {
jsonReader.beginArray();
while (jsonReader.hasNext()){
geo.add(jsonReader.nextDouble());
}
jsonReader.endArray();
} catch (IOException e) {
e.printStackTrace();
}
return geo;
}
/**
* 生成一组JSON数据
* @param view
*/
public void createJSONClick(View view){
ArrayList<User> users = new ArrayList<>();
users.add(new User("hong","cai","hc@qq.com"));
users.add(new User("da","lei","dalei@qq.com"));
users.add(new User("zhang","wei","zw@qq.com"));
createJSON(users);
}
/**
* 创建 一个JSON数据
* @param users
* @return
*/
private String createJSON(ArrayList<User> users) {
JSONArray array = new JSONArray();
for (User user : users) {
JSONObject obj = new JSONObject();
try {
obj.put("firstName",user.getFirstName());
obj.put("lastName",user.getLastName());
obj.put("email",user.getEmail());
} catch (JSONException e) {
e.printStackTrace();
}
array.put(obj);
}
return array.toString();
}
public void gsonClick(View v){
gson();
}
//使用GSON 需要在工程 目录下的 libs中 导入 gson jar包添加到工程的libs目录下,并添加到工程的类库中即可。
private void gson() {
Gson gson = new Gson();
//把JSON数据转换成JAVA对象
String json = "{\"firstName\": \"DAI\",\"lastName\": \"BOBO\",\"email\": \"bobo@moliying.com\"}";
User user = gson.fromJson(json,User.class);
Log.i("JSON",user.toString());
//把JSON数组转换成JAVA对象集合
String json2 = "[{\"firstName\": \"DAI\",\"lastName\": \"BOBO\",\"email\": \"bobo@moliying.com\"}," +
"{\"firstName\": \"hong\",\"lastName\": \"cai\",\"email\": \"hc@moliying.com\"}]";
//new TypeToken<ArrayList<User>>(){}.getType() 指定使用类型存储JSON转换的对象
ArrayList<User> list = gson.fromJson(json2, new TypeToken<ArrayList<User>>(){}.getType());
for (User user1 : list) {
Log.i("JSON",user1.toString());
}
//把对象转换成JSON数据
User user3 = new User("hong","cai","hc@qq.com");
String json4 = gson.toJson(user3);
Log.i("JSON",json4);
//把一组对象转换成JSON数组
ArrayList<User> users = new ArrayList<>();
users.add(new User("hong","cai","hc@qq.com"));
users.add(new User("da","lei","dalei@qq.com"));
users.add(new User("zhang","wei","zw@qq.com"));
String json5 = gson.toJson(user);
Log.i("JSON",json5);
}
// class MyTypeToken extends TypeToken<ArrayList<User>>{}</span>